actix_server

# Struct ServerBuilder

source

    pub struct ServerBuilder { /* private fields */ }

Expand description

Server builder.

## Implementations§

source §

### impl ServerBuilder

source

#### pub fn new() -> ServerBuilder

Create new Server builder instance

source

#### pub fn workers(self, num: usize) -> Self

Sets number of workers to start.

See `bind()` for more details on how worker count affects the number of server factory instantiations.

The default worker count is the determined by `std::thread::available_parallelism()`. See its documentation to determine what behavior you should expect when server is run.

`num` must be greater than 0.

##### §Panics

Panics if `num` is 0.

source

#### pub fn worker_max_blocking_threads(self, num: usize) -> Self

Set max number of threads for each worker’s blocking task thread pool.

One thread pool is set up per worker; not shared across workers.

##### §Examples:

    let builder = ServerBuilder::new()
        .workers(4) // server has 4 worker thread.
        .worker_max_blocking_threads(4); // every worker has 4 max blocking threads.

See [tokio::runtime::Builder::max_blocking_threads] for behavior reference.

source

#### pub fn backlog(self, num: u32) -> Self

Set the maximum number of pending connections.

This refers to the number of clients that can be waiting to be served. Exceeding this number results in the client getting an error when attempting to connect. It should only affect servers under significant load.

Generally set in the 64-2048 range. Default value is 2048.

This method should be called before `bind()` method call.

source

#### pub fn mptcp(self, mptcp_enabled: MpTcp) -> Self

Sets MultiPath TCP (MPTCP) preference on bound sockets.

Multipath TCP (MPTCP) builds on top of TCP to improve connection redundancy and performance by sharing a network data stream across multiple underlying TCP sessions. See mptcp.dev for more info about MPTCP itself.

MPTCP is available on Linux kernel version 5.6 and higher. In addition, you’ll also need to ensure the kernel option is enabled using `sysctl net.mptcp.enabled=1`.

This method will have no effect if called after a `bind()`.

source

#### pub fn max_concurrent_connections(self, num: usize) -> Self

Sets the maximum per-worker number of concurrent connections.

All socket listeners will stop accepting connections when this limit is reached for each worker.

By default max connections is set to a 25k per worker.

source

#### pub fn system_exit(self) -> Self

Sets flag to stop Actix `System` after server shutdown.

This has no effect when server is running in a Tokio-only runtime.

source

#### pub fn disable_signals(self) -> Self

Disables OS signal handling.

source

#### pub fn shutdown_timeout(self, sec: u64) -> Self

Timeout for graceful workers shutdown in seconds.

After receiving a stop signal, workers have this much time to finish serving requests. Workers still alive after the timeout are force dropped.

By default shutdown timeout sets to 30 seconds.

source

#### pub fn bind<F, U, N>(self, name: N, addrs: U, factory: F) -> Result<Self>
where F: ServerServiceFactory<TcpStream>, U: ToSocketAddrs, N: AsRef<str>,

Adds new service to the server.

Note that, if a DNS lookup is required, resolving hostnames is a blocking operation.

##### §Worker Count

The `factory` will be instantiated multiple times in most scenarios. The number of instantiations is number of `workers` × number of sockets resolved by `addrs`.

For example, if you’ve manually set `workers` to 2, and use `127.0.0.1` as the bind `addrs`, then `factory` will be instantiated twice. However, using `localhost` as the bind `addrs` can often resolve to both `127.0.0.1` (IPv4) and `::1` (IPv6), causing the `factory` to be instantiated 4 times (2 workers × 2 bind addresses).

Using a bind address of `0.0.0.0`, which signals to use all interfaces, may also multiple the number of instantiations in a similar way.

##### §Errors

Returns an `io::Error` if:

- `addrs` cannot be resolved into one or more socket addresses;
- all the resolved socket addresses are already bound.

source

#### pub fn listen<F, N: AsRef<str>>( self, name: N, lst: StdTcpListener, factory: F, ) -> Result<Self>
where F: ServerServiceFactory<TcpStream>,

Adds service to the server using a socket listener already bound.

##### §Worker Count

The `factory` will be instantiated multiple times in most scenarios. The number of instantiations is: number of `workers`.

source

#### pub fn run(self) -> Server ⓘ

Starts processing incoming connections and return server controller.

source §

### impl ServerBuilder

source

#### pub fn bind_uds<F, U, N>(self, name: N, addr: U, factory: F) -> Result<Self>
where F: ServerServiceFactory<UnixStream>, N: AsRef<str>, U: AsRef<Path>,

Adds new service to the server using a UDS (unix domain socket) address.

##### §Worker Count

The `factory` will be instantiated multiple times in most scenarios. The number of instantiations is: number of `workers`.

source

#### pub fn listen_uds<F, N: AsRef<str>>( self, name: N, lst: UnixListener, factory: F, ) -> Result<Self>
where F: ServerServiceFactory<UnixStream>,

Adds new service to the server using a UDS (unix domain socket) listener already bound.

Useful when running as a systemd service and a socket FD is acquired externally.

##### §Worker Count

The `factory` will be instantiated multiple times in most scenarios. The number of instantiations is: number of `workers`.

## Trait Implementations§

source §

### impl Default for ServerBuilder

source §

#### fn default() -> Self

Returns the “default value” for a type. Read more

## Auto Trait Implementations§

§

### impl Freeze for ServerBuilder

§

### impl !RefUnwindSafe for ServerBuilder

§

### impl Send for ServerBuilder

§

### impl !Sync for ServerBuilder

§

### impl Unpin for ServerBuilder

§

### impl !UnwindSafe for ServerBuilder

## Blanket Implementations§

source §

### impl<T> Any for T
where T: 'static + ?Sized,

source §

#### fn type_id(&self) -> TypeId

Gets the `TypeId` of `self`. Read more
source §

### impl<T> Borrow<T> for T
where T: ?Sized,

source §

#### fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source §

### impl<T> BorrowMut<T> for T
where T: ?Sized,

source §

#### fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source §

### impl<T> From<T> for T

source §

#### fn from(t: T) -> T

Returns the argument unchanged.

§

### impl<T> Instrument for T

§

#### fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [`Span`], returning an `Instrumented` wrapper. Read more
§

#### fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current `Span`, returning an `Instrumented` wrapper. Read more
source §

### impl<T, U> Into<U> for T
where U: From<T>,

source §

#### fn into(self) -> U

Calls `U::from(self)`.

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

source §

### impl<T, U> TryFrom<U> for T
where U: Into<T>,

source §

#### type Error = Infallible

The type returned in the event of a conversion error.
source §

#### fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source §

### impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source §

#### type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source §

#### fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

### impl<T> WithSubscriber for T

§

#### fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided `Subscriber` to this type, returning a [`WithDispatch`] wrapper. Read more
§

#### fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default `Subscriber` to this type, returning a [`WithDispatch`] wrapper. Read more