mirror of
https://github.com/actix/actix-web.git
synced 2024-11-25 19:11:10 +00:00
docs: improve HttpServer docs on worker / bind relationship wrt factory instantiations
This commit is contained in:
parent
d3d0208cbd
commit
ce18f35e03
1 changed files with 45 additions and 8 deletions
|
@ -99,6 +99,12 @@ where
|
||||||
B: MessageBody + 'static,
|
B: MessageBody + 'static,
|
||||||
{
|
{
|
||||||
/// Create new HTTP server with application factory
|
/// Create new HTTP server with application factory
|
||||||
|
///
|
||||||
|
/// # Worker Count
|
||||||
|
///
|
||||||
|
/// The `factory` will be instantiated multiple times in most configurations. See
|
||||||
|
/// [`bind()`](Self::bind()) docs for more on how worker count and bind address resolution
|
||||||
|
/// causes multiple server factory instantiations.
|
||||||
pub fn new(factory: F) -> Self {
|
pub fn new(factory: F) -> Self {
|
||||||
HttpServer {
|
HttpServer {
|
||||||
factory,
|
factory,
|
||||||
|
@ -119,7 +125,18 @@ where
|
||||||
|
|
||||||
/// Sets number of workers to start (per bind address).
|
/// Sets number of workers to start (per bind address).
|
||||||
///
|
///
|
||||||
/// By default, the number of available physical CPUs is used as the worker count.
|
/// 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.
|
||||||
|
///
|
||||||
|
/// Note that the server factory passed to [`new`](Self::new()) will be instantiated **at least
|
||||||
|
/// once per worker**. See [`bind()`](Self::bind()) docs for more on how worker count and bind
|
||||||
|
/// address resolution causes multiple server factory instantiations.
|
||||||
|
///
|
||||||
|
/// `num` must be greater than 0.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
|
///
|
||||||
|
/// Panics if `num` is 0.
|
||||||
pub fn workers(mut self, num: usize) -> Self {
|
pub fn workers(mut self, num: usize) -> Self {
|
||||||
self.builder = self.builder.workers(num);
|
self.builder = self.builder.workers(num);
|
||||||
self
|
self
|
||||||
|
@ -319,23 +336,41 @@ where
|
||||||
/// Resolves socket address(es) and binds server to created listener(s).
|
/// Resolves socket address(es) and binds server to created listener(s).
|
||||||
///
|
///
|
||||||
/// # Hostname Resolution
|
/// # Hostname Resolution
|
||||||
/// When `addr` includes a hostname, it is possible for this method to bind to both the IPv4 and
|
///
|
||||||
/// IPv6 addresses that result from a DNS lookup. You can test this by passing `localhost:8080`
|
/// When `addrs` includes a hostname, it is possible for this method to bind to both the IPv4
|
||||||
/// and noting that the server binds to `127.0.0.1:8080` _and_ `[::1]:8080`. To bind additional
|
/// and IPv6 addresses that result from a DNS lookup. You can test this by passing
|
||||||
/// addresses, call this method multiple times.
|
/// `localhost:8080` and noting that the server binds to `127.0.0.1:8080` _and_ `[::1]:8080`. To
|
||||||
|
/// bind additional addresses, call this method multiple times.
|
||||||
///
|
///
|
||||||
/// Note that, if a DNS lookup is required, resolving hostnames is a blocking operation.
|
/// 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`](Self::workers()) × number of sockets resolved by
|
||||||
|
/// `addrs`.
|
||||||
|
///
|
||||||
|
/// For example, if you've manually set [`workers`](Self::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.
|
||||||
|
///
|
||||||
/// # Typical Usage
|
/// # Typical Usage
|
||||||
|
///
|
||||||
/// In general, use `127.0.0.1:<port>` when testing locally and `0.0.0.0:<port>` when deploying
|
/// In general, use `127.0.0.1:<port>` when testing locally and `0.0.0.0:<port>` when deploying
|
||||||
/// (with or without a reverse proxy or load balancer) so that the server is accessible.
|
/// (with or without a reverse proxy or load balancer) so that the server is accessible.
|
||||||
///
|
///
|
||||||
/// # Errors
|
/// # Errors
|
||||||
|
///
|
||||||
/// Returns an `io::Error` if:
|
/// Returns an `io::Error` if:
|
||||||
/// - `addrs` cannot be resolved into one or more socket addresses;
|
/// - `addrs` cannot be resolved into one or more socket addresses;
|
||||||
/// - all the resolved socket addresses are already bound.
|
/// - all the resolved socket addresses are already bound.
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// # use actix_web::{App, HttpServer};
|
/// # use actix_web::{App, HttpServer};
|
||||||
/// # fn inner() -> std::io::Result<()> {
|
/// # fn inner() -> std::io::Result<()> {
|
||||||
|
@ -356,6 +391,8 @@ where
|
||||||
|
|
||||||
/// Resolves socket address(es) and binds server to created listener(s) for plaintext HTTP/1.x
|
/// Resolves socket address(es) and binds server to created listener(s) for plaintext HTTP/1.x
|
||||||
/// or HTTP/2 connections.
|
/// or HTTP/2 connections.
|
||||||
|
///
|
||||||
|
/// See [`bind()`](Self::bind()) for more details on `addrs` argument.
|
||||||
#[cfg(feature = "http2")]
|
#[cfg(feature = "http2")]
|
||||||
pub fn bind_auto_h2c<A: net::ToSocketAddrs>(mut self, addrs: A) -> io::Result<Self> {
|
pub fn bind_auto_h2c<A: net::ToSocketAddrs>(mut self, addrs: A) -> io::Result<Self> {
|
||||||
let sockets = bind_addrs(addrs, self.backlog)?;
|
let sockets = bind_addrs(addrs, self.backlog)?;
|
||||||
|
@ -370,7 +407,7 @@ where
|
||||||
/// Resolves socket address(es) and binds server to created listener(s) for TLS connections
|
/// Resolves socket address(es) and binds server to created listener(s) for TLS connections
|
||||||
/// using Rustls v0.20.
|
/// using Rustls v0.20.
|
||||||
///
|
///
|
||||||
/// See [`bind()`](Self::bind) for more details on `addrs` argument.
|
/// See [`bind()`](Self::bind()) for more details on `addrs` argument.
|
||||||
///
|
///
|
||||||
/// ALPN protocols "h2" and "http/1.1" are added to any configured ones.
|
/// ALPN protocols "h2" and "http/1.1" are added to any configured ones.
|
||||||
#[cfg(feature = "rustls-0_20")]
|
#[cfg(feature = "rustls-0_20")]
|
||||||
|
@ -389,7 +426,7 @@ where
|
||||||
/// Resolves socket address(es) and binds server to created listener(s) for TLS connections
|
/// Resolves socket address(es) and binds server to created listener(s) for TLS connections
|
||||||
/// using Rustls v0.21.
|
/// using Rustls v0.21.
|
||||||
///
|
///
|
||||||
/// See [`bind()`](Self::bind) for more details on `addrs` argument.
|
/// See [`bind()`](Self::bind()) for more details on `addrs` argument.
|
||||||
///
|
///
|
||||||
/// ALPN protocols "h2" and "http/1.1" are added to any configured ones.
|
/// ALPN protocols "h2" and "http/1.1" are added to any configured ones.
|
||||||
#[cfg(feature = "rustls-0_21")]
|
#[cfg(feature = "rustls-0_21")]
|
||||||
|
@ -408,7 +445,7 @@ where
|
||||||
/// Resolves socket address(es) and binds server to created listener(s) for TLS connections
|
/// Resolves socket address(es) and binds server to created listener(s) for TLS connections
|
||||||
/// using OpenSSL.
|
/// using OpenSSL.
|
||||||
///
|
///
|
||||||
/// See [`bind()`](Self::bind) for more details on `addrs` argument.
|
/// See [`bind()`](Self::bind()) for more details on `addrs` argument.
|
||||||
///
|
///
|
||||||
/// ALPN protocols "h2" and "http/1.1" are added to any configured ones.
|
/// ALPN protocols "h2" and "http/1.1" are added to any configured ones.
|
||||||
#[cfg(feature = "openssl")]
|
#[cfg(feature = "openssl")]
|
||||||
|
|
Loading…
Reference in a new issue