Skip to content

Instantly share code, notes, and snippets.

@tsidea
Last active February 3, 2021 04:06
Show Gist options
  • Save tsidea/c196847148121db3862b0d1e1f6d9bea to your computer and use it in GitHub Desktop.
Save tsidea/c196847148121db3862b0d1e1f6d9bea to your computer and use it in GitHub Desktop.
simple hello server
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