Struct actix_server::Server

source ·
pub struct Server { /* private fields */ }
Expand description

General purpose TCP server that runs services receiving Tokio TcpStreams.

Handles creating worker threads, restarting faulted workers, connection accepting, and back-pressure logic.

Creates a worker per CPU core (or the number specified in ServerBuilder::workers) and distributes connections with a round-robin strategy.

The Server must be awaited or polled in order to start running. It will resolve when the server has fully shut down.

Shutdown Signals

On UNIX systems, SIGTERM will start a graceful shutdown and SIGQUIT or SIGINT will start a forced shutdown. On Windows, a Ctrl-C signal will start a forced shutdown.

A graceful shutdown will wait for all workers to stop first.

Examples

The following is a TCP echo server. Test using telnet 127.0.0.1 8080.

use std::io;

use actix_rt::net::TcpStream;
use actix_server::Server;
use actix_service::{fn_service, ServiceFactoryExt as _};
use bytes::BytesMut;
use tokio::io::{AsyncReadExt as _, AsyncWriteExt as _};

#[actix_rt::main]
async fn main() -> io::Result<()> {
    let bind_addr = ("127.0.0.1", 8080);

    Server::build()
        .bind("echo", bind_addr, move || {
            fn_service(move |mut stream: TcpStream| {
                async move {
                    let mut size = 0;
                    let mut buf = BytesMut::new();

                    loop {
                        match stream.read_buf(&mut buf).await {
                            // end of stream; bail from loop
                            Ok(0) => break,

                            // write bytes back to stream
                            Ok(bytes_read) => {
                                stream.write_all(&buf[size..]).await.unwrap();
                                size += bytes_read;
                            }

                            Err(err) => {
                                eprintln!("Stream Error: {:?}", err);
                                return Err(());
                            }
                        }
                    }

                    Ok(())
                }
            })
            .map_err(|err| eprintln!("Service Error: {:?}", err))
        })?
        .run()
        .await
}

Implementations§

Create server build.

Get a Server handle that can be used issue commands and change it’s state.

See ServerHandle for usage.

Trait Implementations§

The type of value produced on completion.
Attempt to resolve the future to a final value, registering the current task for wakeup if the value is not yet available. Read more

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Map this future’s output to a different type, returning a new future of the resulting type. Read more
Map this future’s output to a different type, returning a new future of the resulting type. Read more
Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more
Wrap this future in an Either future, making it the left-hand variant of that Either. Read more
Wrap this future in an Either future, making it the right-hand variant of that Either. Read more
Convert this future into a single element stream. Read more
Flatten the execution of this future when the output of this future is itself another future. Read more
Flatten the execution of this future when the successful result of this future is a stream. Read more
Fuse a future such that poll will never again be called once it has completed. This method can be used to turn any Future into a FusedFuture. Read more
Do something with the output of a future before passing it on. Read more
Wrap the future in a Box, pinning it. Read more
Wrap the future in a Box, pinning it. Read more
A convenience for calling Future::poll on Unpin future types.
Evaluates and consumes the future, returning the resulting output if the future is ready after the first call to Future::poll. Read more
Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The output that the future will produce on completion.
Which kind of future are we turning this into?
Creates a future from a value. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type of successful values yielded by this future
The type of failures yielded by this future
Poll this TryFuture as if it were a Future. Read more
Maps this future’s success value to a different value. Read more
Maps this future’s success value to a different value, and permits for error handling resulting in the same type. Read more
Maps this future’s error value to a different value. Read more
Maps this future’s Error to a new error type using the Into trait. Read more
Maps this future’s Ok to a new type using the Into trait.
Executes another future after this one resolves successfully. The success value is passed to a closure to create this subsequent future. Read more
Executes another future if this one resolves to an error. The error value is passed to a closure to create this subsequent future. Read more
Do something with the success value of a future before passing it on. Read more
Do something with the error value of a future before passing it on. Read more
Flatten the execution of this future when the successful result of this future is another future. Read more
Flatten the execution of this future when the successful result of this future is a stream. Read more
Unwraps this future’s output, producing a future with this future’s Ok type as its Output type. Read more
Wraps a TryFuture into a type that implements Future. Read more
A convenience method for calling TryFuture::try_poll on Unpin future types.
The type returned in the event of a conversion error.
Performs the conversion.
Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more