pub struct Builder<I, E = Exec> { /* private fields */ }
Expand description
A builder for a Server
.
Implementations
sourceimpl<I, E> Builder<I, E>
impl<I, E> Builder<I, E>
sourcepub fn new(incoming: I, protocol: Http_<E>) -> Self
pub fn new(incoming: I, protocol: Http_<E>) -> Self
Start a new builder, wrapping an incoming stream and low-level options.
For a more convenient constructor, see Server::bind
.
sourcepub fn http1_keepalive(self, val: bool) -> Self
pub fn http1_keepalive(self, val: bool) -> Self
Sets whether to use keep-alive for HTTP/1 connections.
Default is true
.
sourcepub fn http1_half_close(self, val: bool) -> Self
pub fn http1_half_close(self, val: bool) -> Self
Set whether HTTP/1 connections should support half-closures.
Clients can chose to shutdown their write-side while waiting
for the server to respond. Setting this to false
will
automatically close any connection immediately if read
detects an EOF.
Default is true
.
sourcepub fn http1_only(self, val: bool) -> Self
pub fn http1_only(self, val: bool) -> Self
Sets whether HTTP/1 is required.
Default is false
.
sourcepub fn http1_writev(self, val: bool) -> Self
pub fn http1_writev(self, val: bool) -> Self
Set whether HTTP/1 connections should try to use vectored writes, or always flatten into a single buffer.
Note
Setting this to false
may mean more copies of body data,
but may also improve performance when an IO transport doesn’t
support vectored writes well, such as most TLS implementations.
Default is true
.
sourcepub fn http2_only(self, val: bool) -> Self
pub fn http2_only(self, val: bool) -> Self
Sets whether HTTP/2 is required.
Default is false
.
sourcepub fn http2_initial_stream_window_size_(
self,
sz: impl Into<Option<u32>>
) -> Self
pub fn http2_initial_stream_window_size_(
self,
sz: impl Into<Option<u32>>
) -> Self
Sets the SETTINGS_INITIAL_WINDOW_SIZE
option for HTTP2
stream-level flow control.
Default is 65,535
sourcepub fn http2_initial_connection_window_size_(
self,
sz: impl Into<Option<u32>>
) -> Self
pub fn http2_initial_connection_window_size_(
self,
sz: impl Into<Option<u32>>
) -> Self
Sets the max connection-level flow control for HTTP2
Default is 65,535
sourcepub fn http2_max_concurrent_streams(self, max: impl Into<Option<u32>>) -> Self
pub fn http2_max_concurrent_streams(self, max: impl Into<Option<u32>>) -> Self
Sets the SETTINGS_MAX_CONCURRENT_STREAMS
option for HTTP2
connections.
Default is no limit (None
).
sourcepub fn http1_max_buf_size(self, val: usize) -> Self
pub fn http1_max_buf_size(self, val: usize) -> Self
Set the maximum buffer size.
Default is ~ 400kb.
sourcepub fn executor<E2>(self, executor: E2) -> Builder<I, E2>
pub fn executor<E2>(self, executor: E2) -> Builder<I, E2>
Sets the Executor
to deal with connection tasks.
Default is tokio::spawn
.
sourcepub fn serve<S, B>(self, new_service: S) -> Server<I, S, E> where
I: Stream,
I::Error: Into<Box<dyn StdError + Send + Sync>>,
I::Item: AsyncRead + AsyncWrite + Send + 'static,
S: MakeServiceRef<I::Item, ReqBody = Body, ResBody = B>,
S::Error: Into<Box<dyn StdError + Send + Sync>>,
S::Service: 'static,
B: Payload,
E: NewSvcExec<I::Item, S::Future, S::Service, E, NoopWatcher>,
E: H2Exec<<S::Service as Service>::Future, B>,
pub fn serve<S, B>(self, new_service: S) -> Server<I, S, E> where
I: Stream,
I::Error: Into<Box<dyn StdError + Send + Sync>>,
I::Item: AsyncRead + AsyncWrite + Send + 'static,
S: MakeServiceRef<I::Item, ReqBody = Body, ResBody = B>,
S::Error: Into<Box<dyn StdError + Send + Sync>>,
S::Service: 'static,
B: Payload,
E: NewSvcExec<I::Item, S::Future, S::Service, E, NoopWatcher>,
E: H2Exec<<S::Service as Service>::Future, B>,
Consume this Builder
, creating a Server
.
Example
use hyper::{Body, Response, Server};
use hyper::service::service_fn_ok;
// Construct our SocketAddr to listen on...
let addr = ([127, 0, 0, 1], 3000).into();
// And a NewService to handle each connection...
let new_service = || {
service_fn_ok(|_req| {
Response::new(Body::from("Hello World"))
})
};
// Then bind and serve...
let server = Server::bind(&addr)
.serve(new_service);
// Finally, spawn `server` onto an Executor...
sourceimpl<E> Builder<AddrIncoming, E>
impl<E> Builder<AddrIncoming, E>
sourcepub fn tcp_keepalive(self, keepalive: Option<Duration>) -> Self
pub fn tcp_keepalive(self, keepalive: Option<Duration>) -> Self
Set whether TCP keepalive messages are enabled on accepted connections.
If None
is specified, keepalive is disabled, otherwise the duration
specified will be the time to remain idle before sending TCP keepalive
probes.
sourcepub fn tcp_nodelay(self, enabled: bool) -> Self
pub fn tcp_nodelay(self, enabled: bool) -> Self
Set the value of TCP_NODELAY
option for accepted connections.
sourcepub fn tcp_sleep_on_accept_errors(self, val: bool) -> Self
pub fn tcp_sleep_on_accept_errors(self, val: bool) -> Self
Set whether to sleep on accept errors.
A possible scenario is that the process has hit the max open files allowed, and so trying to accept a new connection will fail with EMFILE. In some cases, it’s preferable to just wait for some time, if the application will likely close some files (or connections), and try to accept the connection again. If this option is true, the error will be logged at the error level, since it is still a big deal, and then the listener will sleep for 1 second.
In other cases, hitting the max open files should be treat similarly to being out-of-memory, and simply error (and shutdown). Setting this option to false will allow that.
For more details see AddrIncoming::set_sleep_on_errors
Trait Implementations
Auto Trait Implementations
impl<I, E> RefUnwindSafe for Builder<I, E> where
E: RefUnwindSafe,
I: RefUnwindSafe,
impl<I, E> Send for Builder<I, E> where
E: Send,
I: Send,
impl<I, E> Sync for Builder<I, E> where
E: Sync,
I: Sync,
impl<I, E> Unpin for Builder<I, E> where
E: Unpin,
I: Unpin,
impl<I, E> UnwindSafe for Builder<I, E> where
E: UnwindSafe,
I: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more