【Rust】Web应用程序 - 二、Actix

在完成了上一章的rust安装后,这一章终于要跑一个网站服务器了,真是令人激动。

经过研究,这里主要是用到了一个叫 actix-web 的纸板箱(库),这个纸板箱拥有极强的并发能力,阿巴阿巴都是虚的,一般不都是为了性能才用Rust的嘛,当然也不排除是像我一样不喜欢用Java或解释型语言这类占用资源很多又啰嗦的语言

  1. 首先将纸板箱加入我们的工程,打开 ./Cargo.toml 文件

    该文件是工程配置文件,里面可以设置工程的一些参数,同时依赖的库也是在这里面添加的。

    [dependencies] 下面添加 actix-web = "3.3.2"

    参考:https://crates.io/crates/actix-web

  2. src/main.rs 中使用以下示例代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    use actix_web::{get, web, App, HttpServer, Responder};

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

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

    use 是类似其他语言的 import 让当前源文件增加依赖库,使得当前源文件中能调用库函数

    #[] 是属性,可以参考:https://doc.rust-lang.org/reference/attributes.html ,调用起来还是很方便的

    async 表示异步函数

    fn 是一般语言的 function 很简短,舒服

    web::Path((id, name)): web::Path<(u32, String)> 是函数的参数,中间的冒号指示这个参数的变量类型,小东西长得挺奇特的,有学过面向对象的语言多看看就理解了

    ? 是将返回值 std::io::Result 自动将异常抛给当前所在函数的返回值

  3. 运行工程

    1
    cargo run

    因为依赖比较多,编译可能会比较久

  4. 使用浏览器打开 http://localhost:8080/123/myName/index.html ,应该可以看到 Hello myName! id:123

【Rust】Web应用程序 - 二、Actix

https://biteax.com/39a1fb2c.html

作者

石志超

发布于

2021-12-14

更新于

2023-09-27

许可协议