Struct ntex::web::HttpServer

source ·
pub struct HttpServer<F, I, S, B>{ /* private fields */ }
Expand description

An HTTP Server.

Create new http server with application factory.

use ntex::web::{self, App, HttpResponse, HttpServer};

#[ntex::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(
        || App::new()
            .service(web::resource("/").to(|| async { HttpResponse::Ok() })))
        .bind("127.0.0.1:59090")?
        .run()
        .await
}

Implementations§

source§

impl<F, I, S, B> HttpServer<F, I, S, B>
where F: Fn() -> I + Send + Clone + 'static, I: IntoServiceFactory<S, Request, AppConfig>, S: ServiceFactory<Request, AppConfig> + 'static, S::Error: ResponseError, S::InitError: Debug, S::Response: Into<Response<B>>, B: MessageBody + 'static,

source

pub fn new(factory: F) -> Self

Create new http server with application factory

source

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

Set number of workers to start.

By default http server uses number of available logical cpu as threads count.

source

pub fn backlog(self, backlog: i32) -> 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 maxconn(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.

source

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

Sets the maximum per-worker concurrent connection establish process.

All listeners will stop accepting connections when this limit is reached. It can be used to limit the global SSL CPU usage.

By default max connections is set to a 256.

source

pub fn keep_alive<T: Into<KeepAlive>>(self, val: T) -> Self

Set server keep-alive setting.

By default keep alive is set to a 5 seconds.

source

pub fn client_timeout(self, timeout: Seconds) -> Self

Set request read timeout in seconds.

Defines a timeout for reading client request headers. If a client does not transmit the entire set headers within this time, the request is terminated with the 408 (Request Time-out) error.

To disable timeout set value to 0.

By default client timeout is set to 3 seconds.

source

pub fn disconnect_timeout(self, val: Seconds) -> Self

Set server connection disconnect timeout in seconds.

Defines a timeout for shutdown connection. If a shutdown procedure does not complete within this time, the request is dropped.

To disable timeout set value to 0.

By default client timeout is set to 5 seconds.

source

pub fn ssl_handshake_timeout(self, val: Seconds) -> Self

Set server ssl handshake timeout in seconds.

Defines a timeout for connection ssl handshake negotiation. To disable timeout set value to 0.

By default handshake timeout is set to 5 seconds.

source

pub fn headers_read_rate( self, timeout: Seconds, max_timeout: Seconds, rate: u16 ) -> Self

Set read rate parameters for request headers.

Set max timeout for reading request headers. If the client sends rate amount of data, increase the timeout by 1 second for every. But no more than max_timeout timeout.

By default headers read rate is set to 1sec with max timeout 5sec.

source

pub fn payload_read_rate( self, timeout: Seconds, max_timeout: Seconds, rate: u16 ) -> Self

Set read rate parameters for request’s payload.

Set time pariod for reading payload. Client must sends rate amount of data per one time period. But no more than max_timeout timeout.

By default payload read rate is disabled.

source

pub fn server_hostname<T: AsRef<str>>(self, val: T) -> Self

Set server host name.

Host name is used by application router as a hostname for url generation. Check ConnectionInfo documentation for more information.

By default host name is set to a “localhost” value.

source

pub fn stop_runtime(self) -> Self

Stop ntex runtime when server get dropped.

By default “stop runtime” is disabled.

source

pub fn disable_signals(self) -> Self

Disable signal handling.

By default signal handling is enabled.

source

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

Timeout for graceful workers shutdown.

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 memory_pool(self, id: PoolId) -> Self

Set memory pool.

Use specified memory pool for memory allocations.

source

pub fn listen(self, lst: TcpListener) -> Result<Self>

Use listener for accepting incoming connection requests

HttpServer does not change any configuration for TcpListener, it needs to be configured before passing it to listen() method.

source

pub fn listen_openssl( self, lst: TcpListener, builder: SslAcceptorBuilder ) -> Result<Self>

Use listener for accepting incoming tls connection requests

This method sets alpn protocols to “h2” and “http/1.1”

source

pub fn listen_rustls( self, lst: TcpListener, config: RustlsServerConfig ) -> Result<Self>

Use listener for accepting incoming tls connection requests

This method sets alpn protocols to “h2” and “http/1.1”

source

pub fn bind<A: ToSocketAddrs>(self, addr: A) -> Result<Self>

The socket address to bind

To bind multiple addresses this method can be called multiple times.

source

pub fn bind_openssl<A>( self, addr: A, builder: SslAcceptorBuilder ) -> Result<Self>
where A: ToSocketAddrs,

Start listening for incoming tls connections.

This method sets alpn protocols to “h2” and “http/1.1”

source

pub fn bind_rustls<A: ToSocketAddrs>( self, addr: A, config: RustlsServerConfig ) -> Result<Self>

Start listening for incoming tls connections.

This method sets alpn protocols to “h2” and “http/1.1”

source

pub fn listen_uds(self, lst: UnixListener) -> Result<Self>

Start listening for unix domain connections on existing listener.

This method is available with uds feature.

source

pub fn bind_uds<A>(self, addr: A) -> Result<Self>
where A: AsRef<Path>,

Start listening for incoming unix domain connections.

This method is available with uds feature.

source§

impl<F, I, S, B> HttpServer<F, I, S, B>
where F: Fn() -> I + Send + Clone + 'static, I: IntoServiceFactory<S, Request, AppConfig>, S: ServiceFactory<Request, AppConfig>, S::Error: ResponseError, S::InitError: Debug, S::Response: Into<Response<B>>, S::Service: 'static, B: MessageBody,

source

pub fn run(self) -> Server

Start listening for incoming connections.

This method starts number of http workers in separate threads. For each address this method starts separate thread which does accept() in a loop.

This methods panics if no socket address can be bound or an ntex system is not yet configured.

use ntex::web::{self, App, HttpResponse, HttpServer};

#[ntex::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(
        || App::new().service(web::resource("/").to(|| async { HttpResponse::Ok() }))
    )
        .bind("127.0.0.1:0")?
        .run()
        .await
}

Auto Trait Implementations§

§

impl<F, I, S, B> Freeze for HttpServer<F, I, S, B>
where F: Freeze,

§

impl<F, I, S, B> !RefUnwindSafe for HttpServer<F, I, S, B>

§

impl<F, I, S, B> Send for HttpServer<F, I, S, B>
where B: Send, S: Send,

§

impl<F, I, S, B> !Sync for HttpServer<F, I, S, B>

§

impl<F, I, S, B> Unpin for HttpServer<F, I, S, B>
where B: Unpin, F: Unpin, S: Unpin,

§

impl<F, I, S, B> !UnwindSafe for HttpServer<F, I, S, B>

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.

source§

impl<T> Instrument for T

source§

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

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

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> Same for T

§

type Output = T

Should always be Self
source§

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

§

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>,

§

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.
source§

impl<T> WithSubscriber for T

source§

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
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

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