Skip to main content

nimble_http/
server.rs

1//! server.rs
2
3use crate::Router;
4use hyper::server::Server;
5use hyper::service::{make_service_fn, service_fn};
6use std::net::SocketAddr;
7use std::sync::Arc;
8
9impl Router {
10	/// 启动 HTTP 服务器
11	pub async fn run(self, host: &str, port: u16) {
12		let addr: SocketAddr = format!("{}:{}", host, port).parse().expect("invalid socket address: invalid IP address syntax");
13
14		let router = Arc::new(self);
15
16		let make_svc = make_service_fn(move |_conn| {
17			let router = router.clone();
18			async move {
19				Ok::<_, hyper::Error>(service_fn(move |req| {
20					let router = router.clone();
21					async move { Ok::<_, hyper::Error>(router.handle_request(req).await) }
22				}))
23			}
24		});
25
26		let server = Server::bind(&addr).serve(make_svc);
27
28		println!("Nimble server running on http://{}", addr);
29		println!("Press Ctrl+C to stop");
30
31		if let Err(e) = server.await {
32			eprintln!("Server error: {}", e);
33		}
34	}
35}