Struct axum_server::Server
source · [−]pub struct Server<A = DefaultAcceptor> { /* private fields */ }Expand description
HTTP server.
Implementations
sourceimpl Server
impl Server
sourcepub fn bind(addr: SocketAddr) -> Self
pub fn bind(addr: SocketAddr) -> Self
Create a server that will bind to provided address.
sourcepub fn from_tcp(listener: TcpListener) -> Self
pub fn from_tcp(listener: TcpListener) -> Self
Create a server from existing std::net::TcpListener.
sourceimpl<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>
Overwrite acceptor.
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 = axum_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,
Map acceptor.
sourcepub fn handle(self, handle: Handle) -> Self
pub fn handle(self, handle: Handle) -> Self
Provide a handle for additional 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);
axum_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);
axum_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
Overwrite 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);
axum_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
Overwrite addr incoming configuration.
Examples found in repository?
examples/configure_addr_incoming.rs (line 23)
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
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)))
.build();
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
println!("listening on {}", addr);
axum_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,
Serve provided MakeService.
To create MakeService easily, Shared from tower can be used.
Errors
An error will be returned when:
- Binding to an address fails.
make_servicereturns an error whenpoll_readyis called. This never happens onaxummake 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);
axum_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);
axum_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);
axum_server::bind(addr)
.http_config(config)
.serve(app.into_make_service())
.await
.unwrap();
}examples/shutdown.rs (line 25)
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);
axum_server::bind(addr)
.handle(handle)
.serve(app.into_make_service())
.await
.unwrap();
println!("server is shut down");
}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
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
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
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber to this type, returning a
WithDispatch wrapper. Read more