Never built anything on a large scale, yet, however I checked out Rocket, Gotham and Actix-Web, and of the three, I personally like the last one the most, because it is very maintainable, scalable and can handle requests in parallel easily. It supports many modern things out of the box, like HTTP2, WebSockets, Middleware, etc. It's also built on top of Tokio and once you wrap your head around the actor framework, it's stupidly easy and maintainable (see for example my simple WS server for my Hashnode TM script).
Example:
extern crate actix_web;
use actix_web::{server, App, HttpRequest, Responder};
fn greet(req: &HttpRequest) -> impl Responder {
let to = req.match_info().get("name").unwrap_or("World");
format!("Hello {}!", to)
}
fn main() {
server::new(|| {
App::new()
.resource("/", |r| r.f(greet))
.resource("/{name}", |r| r.f(greet))
})
.bind("127.0.0.1:8000")
.expect("Can not bind to port 8000")
.run();
}
One of the things I am constantly missing, though, is a way to replace certificates at runtime, so we can use the ACME protocol for Let's Encrypt (or an internal ACME provider). So if anyone encounters a Rust web server framework which supports ACME, cc me :D