Go to file
Huston Bokinsky 9d7b6f401d Hide continuation frames from application layer.
This commit asserts that continuation frames are an implementation
detail of the websocket layer, and should remain hidden from the
application layer.  That is:
  - a codec should write only frames to the wire, and read only frames from the wire
  - when sending messages, the websocket implementation should break large
    text and binary messages into continuation frames -- the application should
    not have to be aware of this.
  - when receiving messages, the websocket implementation should reconstitute
    continuation frames into their original messages -- the application should
    not have to handle this.
  - the application should only have to send and receive complete websocket messages

Here, the reconstitution of continuation frames into their original messages is
done by the Stream implementation of actix_web_actors::ws::WsStream, by adding
a continuation frame buffer and not issuing a Poll::Ready(Some(Ok)) result until
a complete message has been buffered.  A test in actix_web_actors::tests::test_ws.rs
checks this.

The breaking of large message payloads into sequential continuation frames is
done by the addition of an actix_http::ws::frame_iters module, which introduces
two structs ContinuationBins and ContinuationTexts.  These are iterators over
either single Frame::Binary or Frame::Text frames, if the payloads are small,
or over sequences of Frame::Continuation's with appropriate Items FirstBinary/FirstText,
Continue, and Last.  New tests in actix_http::ws::frame_iters verify this
functionality.
2020-04-19 22:32:28 -07:00
.github Remove cache config from GHA workflows 2020-04-13 03:42:44 +09:00
actix-cors Add notes to READMEs 2020-03-12 07:57:38 +09:00
actix-files Update `actix-web` dependency to 3.0.0-alpha.1 2020-03-12 03:03:50 +09:00
actix-framed Update tests 2020-03-08 16:42:45 +09:00
actix-http Hide continuation frames from application layer. 2020-04-19 22:32:28 -07:00
actix-identity Add notes to READMEs 2020-03-12 07:57:38 +09:00
actix-multipart Update `actix-web` dependency to 3.0.0-alpha.1 2020-03-12 03:03:50 +09:00
actix-session Add notes to READMEs 2020-03-12 07:57:38 +09:00
actix-web-actors Hide continuation frames from application layer. 2020-04-19 22:32:28 -07:00
actix-web-codegen Refactor actix-codegen duplicate code (#1423) 2020-03-20 04:40:42 +09:00
awc Implement `std::error::Error` for our custom errors 2020-03-18 00:22:18 -03:00
benches Add benchmark for full stack request lifecycle (#1298) 2020-01-25 08:05:25 +09:00
examples Fix/suppress warnings 2020-02-08 02:20:01 +09:00
src set data container on default service calls 2020-04-14 02:33:19 +01:00
test-server actix-http: Remove `failure` support (#1449) 2020-04-16 06:54:34 +09:00
tests Fix clippy warnings 2020-03-12 00:52:21 -03:00
.appveyor.yml update deps 2018-10-08 21:58:37 -07:00
.gitignore start working on guide 2017-11-27 16:41:37 -08:00
CHANGES.md set data container on default service calls 2020-04-14 02:33:19 +01:00
CODE_OF_CONDUCT.md code of conduct 2018-01-21 15:29:02 -08:00
Cargo.toml actix-http: Remove `failure` support (#1449) 2020-04-16 06:54:34 +09:00
LICENSE-APACHE add mit license 2017-12-17 10:08:44 -08:00
LICENSE-MIT spelling check 2018-03-24 09:35:52 +03:00
MIGRATION.md Add actix-http support for actix error messages (#1379) 2020-02-27 09:34:49 +09:00
README.md Tweak README 2020-04-08 04:48:01 +09:00
codecov.yml Remove codecoverage for tests and examples (#1299) 2020-01-24 05:10:02 +09:00
rustfmt.toml copy actix-web2 2019-03-01 22:51:32 -08:00

README.md

Actix web

Actix web is a small, pragmatic, and extremely fast rust web framework

Build Status codecov crates.io Join the chat at https://gitter.im/actix/actix Documentation Download Version License

Website | Chat | Examples


Actix web is a simple, pragmatic and extremely fast web framework for Rust.

Docs

Example

Dependencies:

[dependencies]
actix-web = "2"
actix-rt = "1"

Code:

use actix_web::{get, web, App, HttpServer, Responder};

#[get("/{id}/{name}/index.html")]
async fn index(info: web::Path<(u32, String)>) -> impl Responder {
    format!("Hello {}! id:{}", info.1, info.0)
}

#[actix_rt::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| App::new().service(index))
        .bind("127.0.0.1:8080")?
        .run()
        .await
}

More examples

You may consider checking out this directory for more examples.

Benchmarks

License

This project is licensed under either of

at your option.

Code of Conduct

Contribution to the actix-web crate is organized under the terms of the Contributor Covenant, the maintainer of actix-web, @fafhrd91, promises to intervene to uphold that code of conduct.