Struct hyper_server::Server
source · pub struct Server<A = DefaultAcceptor> { /* private fields */ }
Expand description
Represents an HTTP server with customization capabilities for handling incoming requests.
Implementations§
source§impl Server
impl Server
sourcepub fn bind(addr: SocketAddr) -> Self
pub fn bind(addr: SocketAddr) -> Self
Constructs a server bound to the provided address.
sourcepub fn from_tcp(listener: TcpListener) -> Self
pub fn from_tcp(listener: TcpListener) -> Self
Constructs a server from an existing std::net::TcpListener
.
source§impl<A> Server<A>
impl<A> Server<A>
sourcepub fn acceptor<Acceptor>(self, acceptor: Acceptor) -> Server<Acceptor>
pub fn acceptor<Acceptor>(self, acceptor: Acceptor) -> Server<Acceptor>
Replace the current acceptor with a new one.
Examples found in repository?
examples/rustls_session.rs (line 32)
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
async fn main() {
let app = Router::new().route("/", get(handler));
let config = RustlsConfig::from_pem_file(
"examples/self-signed-certs/cert.pem",
"examples/self-signed-certs/key.pem",
)
.await
.unwrap();
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
println!("listening on {}", addr);
let acceptor = CustomAcceptor::new(RustlsAcceptor::new(config));
let server = hyper_server::bind(addr).acceptor(acceptor);
server.serve(app.into_make_service()).await.unwrap();
}
sourcepub fn map<Acceptor, F>(self, acceptor: F) -> Server<Acceptor>where
F: FnOnce(A) -> Acceptor,
pub fn map<Acceptor, F>(self, acceptor: F) -> Server<Acceptor>where
F: FnOnce(A) -> Acceptor,
Maps the current acceptor to a new type.
sourcepub fn handle(self, handle: Handle) -> Self
pub fn handle(self, handle: Handle) -> Self
Provides the server with a handle for extra utilities.
Examples found in repository?
examples/shutdown.rs (line 24)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
async fn main() {
let app = Router::new().route("/", get(|| async { "Hello, world!" }));
let handle = Handle::new();
// Spawn a task to shutdown server.
tokio::spawn(shutdown(handle.clone()));
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
println!("listening on {}", addr);
hyper_server::bind(addr)
.handle(handle)
.serve(app.into_make_service())
.await
.unwrap();
println!("server is shut down");
}
More examples
examples/graceful_shutdown.rs (line 27)
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
async fn main() {
let app = Router::new().route("/", get(|| async { "Hello, world!" }));
let handle = Handle::new();
// Spawn a task to gracefully shutdown server.
tokio::spawn(graceful_shutdown(handle.clone()));
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
println!("listening on {}", addr);
hyper_server::bind(addr)
.handle(handle)
.serve(app.into_make_service())
.await
.unwrap();
println!("server is shut down");
}
sourcepub fn http_config(self, config: HttpConfig) -> Self
pub fn http_config(self, config: HttpConfig) -> Self
Replaces the current HTTP configuration.
Examples found in repository?
examples/configure_http.rs (line 22)
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
async fn main() {
let app = Router::new().route("/", get(|| async { "Hello, world!" }));
let config = HttpConfig::new()
.http1_only(true)
.http2_only(false)
.max_buf_size(8192)
.build();
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
println!("listening on {}", addr);
hyper_server::bind(addr)
.http_config(config)
.serve(app.into_make_service())
.await
.unwrap();
}
sourcepub fn addr_incoming_config(self, config: AddrIncomingConfig) -> Self
pub fn addr_incoming_config(self, config: AddrIncomingConfig) -> Self
Replaces the current incoming address configuration.
Examples found in repository?
examples/configure_addr_incoming.rs (line 25)
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
async fn main() {
let app = Router::new().route("/", get(|| async { "Hello, world!" }));
let config = AddrIncomingConfig::new()
.tcp_nodelay(true)
.tcp_sleep_on_accept_errors(true)
.tcp_keepalive(Some(Duration::from_secs(32)))
.tcp_keepalive_interval(Some(Duration::from_secs(1)))
.tcp_keepalive_retries(Some(1))
.build();
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
println!("listening on {}", addr);
hyper_server::bind(addr)
.addr_incoming_config(config)
.serve(app.into_make_service())
.await
.unwrap();
}
sourcepub async fn serve<M>(self, make_service: M) -> Result<()>where
M: MakeServiceRef<AddrStream, Request<Body>>,
A: Accept<AddrStream, M::Service> + Clone + Send + Sync + 'static,
A::Stream: AsyncRead + AsyncWrite + Unpin + Send,
A::Service: SendService<Request<Body>> + Send,
A::Future: Send,
pub async fn serve<M>(self, make_service: M) -> Result<()>where
M: MakeServiceRef<AddrStream, Request<Body>>,
A: Accept<AddrStream, M::Service> + Clone + Send + Sync + 'static,
A::Stream: AsyncRead + AsyncWrite + Unpin + Send,
A::Service: SendService<Request<Body>> + Send,
A::Future: Send,
Serves the provided MakeService
.
The MakeService
is responsible for constructing services for each incoming connection.
Each service is then used to handle requests from that specific connection.
Arguments
make_service
: A mutable reference to a type implementing theMakeServiceRef
trait. This will be used to produce a service for each incoming connection.
Errors
This method can return errors in the following scenarios:
- When binding to an address fails.
- If the
make_service
function encounters an error during itspoll_ready
call. It’s worth noting that this error scenario doesn’t typically occur withaxum
make services.
Examples found in repository?
More examples
examples/http_and_https.rs (line 25)
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
async fn http_server() {
let app = Router::new().route("/", get(http_handler));
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
println!("http listening on {}", addr);
hyper_server::bind(addr)
.serve(app.into_make_service())
.await
.unwrap();
}
async fn http_handler(uri: Uri) -> Redirect {
let uri = format!("https://127.0.0.1:3443{}", uri.path());
Redirect::temporary(&uri)
}
async fn https_server() {
let app = Router::new().route("/", get(|| async { "Hello, world!" }));
let config = RustlsConfig::from_pem_file(
"examples/self-signed-certs/cert.pem",
"examples/self-signed-certs/key.pem",
)
.await
.unwrap();
let addr = SocketAddr::from(([127, 0, 0, 1], 3443));
println!("https listening on {}", addr);
hyper_server::bind_rustls(addr, config)
.serve(app.into_make_service())
.await
.unwrap();
}
examples/configure_http.rs (line 23)
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
async fn main() {
let app = Router::new().route("/", get(|| async { "Hello, world!" }));
let config = HttpConfig::new()
.http1_only(true)
.http2_only(false)
.max_buf_size(8192)
.build();
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
println!("listening on {}", addr);
hyper_server::bind(addr)
.http_config(config)
.serve(app.into_make_service())
.await
.unwrap();
}
Trait Implementations§
Auto Trait Implementations§
impl<A = DefaultAcceptor> !RefUnwindSafe for Server<A>
impl<A> Send for Server<A>where
A: Send,
impl<A> Sync for Server<A>where
A: Sync,
impl<A> Unpin for Server<A>where
A: Unpin,
impl<A = DefaultAcceptor> !UnwindSafe for Server<A>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more