1
0
Fork 0
mirror of https://github.com/actix/actix-web.git synced 2024-12-24 00:50:36 +00:00
Actix Web is a powerful, pragmatic, and extremely fast web framework for Rust.
Find a file
Nikolay Kim 4913e7d3c2 cleanup
2017-12-14 22:22:27 -08:00
examples add ssl guide ref 2017-12-13 21:56:30 -08:00
guide update readme 2017-12-14 20:12:28 -08:00
src cleanup 2017-12-14 22:22:27 -08:00
tests move tests 2017-12-13 11:16:26 -08:00
.appveyor.yml fix appveyor config for gnu target 2017-11-07 09:43:39 -08:00
.gitignore start working on guide 2017-11-27 16:41:37 -08:00
.travis.yml add NormalizePath handler 2017-12-09 11:39:13 -08:00
build.rs refactor keep-alive; update guide 2017-12-13 21:38:47 -08:00
Cargo.toml various cleanups 2017-12-13 11:10:03 -08:00
CHANGES.md refactor streaming responses 2017-11-30 14:42:20 -08:00
LICENSE prep work 2017-09-30 09:10:03 -07:00
Makefile more guide 2017-11-28 18:00:10 -08:00
README.md cleanup 2017-12-14 22:22:27 -08:00

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.

HTTP/2

Actix web automatically upgrades connection to http/2 if possible.

Negotiation

HTTP/2 protocol over tls without prior knowlage requires tls alpn. At the moment only rust-openssl supports alpn.

[dependencies]
actix-web = { git = "https://github.com/actix/actix-web", features=["alpn"] }

Upgrade to http/2 schema described in rfc section 3.2 is not supported. Starting http/2 with prior knowledge is supported for both clear text connection and tls connection. rfc section 3.4

tls example

Benchmarks

This is totally unscientific and probably pretty useless. In real world business logic would dominate on performance side. But in any case. i took several web frameworks for rust and used theirs hello world example. 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 localhost on MacBook Pro late 2017. It has 4 cpu 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 87.200 813.200 122.100 1.877.000 107.400 2.390.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

Some notes on results. Iron and Rocket got tested with 8 threads, which showed best results. Gothan and tokio-minihttp seem 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 showed absolutly same results for any how number of threads (maybe macos?) Rocket completely failed in pipelined tests.

Examples

License

Actix web is licensed under the Apache-2.0 license.