Last active
February 3, 2021 04:06
-
-
Save tsidea/c196847148121db3862b0d1e1f6d9bea to your computer and use it in GitHub Desktop.
simple hello server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::convert::Infallible; | |
use std::net::SocketAddr; | |
use hyper::{Body, Request, Response, Server, server::conn::AddrStream}; | |
use hyper::service::{make_service_fn, service_fn}; | |
async fn handle_request(request: Request<Body>, remote_addr: SocketAddr) -> Result<Response<Body>, Infallible> { | |
Ok(Response::new(Body::from(format!("Hello there connection {}\n", remote_addr)))) | |
} | |
#[tokio::main(flavor = "current_thread")] | |
async fn main() { | |
//hyper server boilerplate code from https://hyper.rs/guides/server/hello-world/ | |
// We'll bind to 127.0.0.1:3000 | |
let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); | |
println!("Listening on {} for http or websocket connections.", addr); | |
// A `Service` is needed for every connection, so this | |
// creates one from our `handle_request` function. | |
let make_svc = make_service_fn(|conn: & AddrStream| { | |
let remote_addr = conn.remote_addr(); | |
async move { | |
// service_fn converts our function into a `Service` | |
Ok::<_, Infallible>(service_fn(move |request: Request<Body>| | |
handle_request(request, remote_addr) | |
)) | |
} | |
}); | |
let server = Server::bind(&addr).serve(make_svc); | |
// Run this server for... forever! | |
if let Err(e) = server.await { | |
eprintln!("server error: {}", e); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment