1
0
Fork 0
mirror of https://github.com/actix/actix-web.git synced 2024-06-02 13:29:24 +00:00
actix-web/README.md
2017-12-16 11:22:39 -08:00

3.8 KiB

Actix web Build Status Build status codecov crates.io

Actix web is a small, fast, down-to-earth, open source rust web framework.

use actix_web::*;

fn index(req: HttpRequest) -> String {
    format!("Hello {}!", &req.match_info()["name"])
}

fn main() {
    HttpServer::new(
        || Application::new()
            .resource("/{name}", |r| r.f(index)))
        .serve("127.0.0.1:8080");
}

Documentation

Features

  • Supported HTTP/1.x and HTTP/2.0 protocols
  • Streaming and pipelining
  • Keep-alive and slow requests handling
  • WebSockets
  • Transparent content compression/decompression (br, gzip, deflate)
  • Configurable request routing
  • Multipart streams
  • Middlewares (Logger, Session, DefaultHeaders)
  • Built on top of Actix.

Benchmarks

This is totally unscientific and probably pretty useless. In real world, business logic would dominate on performance side. I took several web frameworks for rust and used hello world examples for tests. All projects are compiled with --release parameter. I didnt test single thread performance for iron and rocket. As a testing tool i used wrk and following commands

wrk -t20 -c100 -d10s http://127.0.0.1:8080/

wrk -t20 -c100 -d10s http://127.0.0.1:8080/ -s ./pipeline.lua --latency -- / 128

I ran all tests on my MacBook Pro with 2.9Gh i7 with 4 physical cpus and 8 logical cpus. Each result is best of five runs. All measurements are req/sec.

Name 1 thread 1 pipeline 3 thread 3 pipeline 8 thread 8 pipeline
Actix 91.200 950.000 122.100 2.083.000 107.400 2.730.000
Gotham 61.000 178.000
Iron 94.500 78.000
Rocket 95.500 failed
Shio 71.800 317.800
tokio-minihttp 106.900 1.047.000

I got best performance for sync frameworks with 8 threads, other number of threads always gave me worse performance. Iron could handle piplined requests with lower performace. Interestingly, Rocket completely failed in pipelined test. Gothan seems does not support multithreading, or at least i couldn't figured out. I manually enabled pipelining for Shio and Gotham. While shio seems support multithreading, but it result absolutly same results for any how number of threads (maybe macos problem?).

Examples

License

Actix web is licensed under the Apache-2.0 license.