#actix-web #async-await #actix #await #web #async

nightly actix-web-async-await

提供对支持 async/await 的 Actix 的预览

3 个不稳定版本

0.2.0 2018 年 11 月 6 日
0.1.1 2018 年 10 月 26 日
0.1.0 2018 年 10 月 26 日

#2066异步

28 每月下载

MIT/Apache

7KB

Actix Web Async/Await 预览

此 crate 提供了对支持 async/await 的 Actix 的预览。

用法

要使用此 crate,您需要从 Rust 2018 版本 crate 开始。

将其添加到您的 Cargo.toml 中

# In the `[package]` section
edition = "2018"

# In the `[dependencies]` section
actix-web-async-await = "0.1.0"

然后开始。以下是一个添加了异步延迟请求 2 秒的 Actix 主示例

一般想法是将您的 async fn 处理器包装在 compat 中。对于需要多个参数的路由,有 compat2compat3 等。

#![feature(await_macro, futures_api, async_await)]

use actix_web::{http, server, App, Path, Responder, Result};
use actix_web_async_await::{await, compat};
use std::time::{Instant, Duration};
use tokio::timer::Delay;

async fn index(info: Path<(u32, String)>) -> Result<impl Responder> {
    // Wait 2s
    await!(Delay::new(Instant::now() + Duration::from_secs(2)))?;

    // Proceed with normal response
    Ok(format!("Hello {}! id:{}", info.1, info.0))
}

fn main() {
    server::new(
        || App::new()
            .route("/{id}/{name}/index.html", http::Method::GET, compat(index)))
        .bind("127.0.0.1:8080").unwrap()
        .run();
}

请注意,您当前的 async fn 处理器必须返回 Result。这不仅是因为它们正在转换为 futures v0.1,这需要一个错误类型,而且还因为 Rust 异步生态系统中几乎所有内容都使用 futures v0.1,这将导致所有 futures 出现错误。如果需要,可以提供无错误的 compat

许可

根据您选择的以下任一许可

供您选择。

贡献

除非您明确声明,否则您有意提交的任何贡献,根据 Apache-2.0 许可证的定义,应按上述方式双许可,不附加任何其他条款或条件。

依赖

~27MB
~503K SLoC