23.rust服务器开发:axum详解

一、前言

因为rust拥有着极高的性能,加上tokio这个非常优秀的运行时,这使得rust很适合被用于开发服务器。

目前rust已经拥有了众多的web框架,例如rocket、axum、axtix-web、tide、warp等等。

而axum这个web框架是由tokio团队所维护的,相对来说,可能在某些方面更加专业,所以本文也将以axum框架来介绍rust的web框架开发。

二、基本使用

axum框架是构建于tokio之上的,所以你想要使用axum,首先就需要添加tokio包。

下面是一个最小的依赖包:

[dependencies]
axum = "0.7.5"
tokio = { version = "1.39.2", features = ["full"] }

将上面两个依赖项复制到你的项目配置文件中,我们就可以开始开发web项目了。

首先,写好main.rs文件中的异步入口函数:

#[tokio::main]
async fn main() {

}

不清楚tokio基本使用与原理的,可以先去看看这篇文章:rust异步库tokio入门

然后写好基本的axum服务器启动代码:

use axum::{routing::get, Router};

#[tokio::main]
async fn main() {

    let app = Router::new().route("/", get(root));

    let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
    axum::serve(listener, app).await.unwrap();
}
  
async fn root() -> &'static str {
    "Hello, World!"
}

首先是定义路由:

let app = Router::new().route("/", get(root));

所谓路由,就是我们在浏览器中看到的路径,比如本网站的一篇文章在浏览器上的链接为:

https://www.kucoding.com/article/229.html

去除前面的协议、域名,剩下的就是路由了:

/article/229.html

所以这里定义的路由/代表的就是网站的根目录。

每个路由都可以接收所有可能的HTTP请求,比如常见的GET、POST请求等,这些请求都对应于axum提供的方法。

比如GET请求,这里就对应于get方法,get方法的参数是一个处理该get请求的函数,比如这里的root函数。

更多路由定义方式会在后文介绍。

定义好了路由之后,我们需要为我们的服务器绑定一个地址:

let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();

注意这里使用的是tokio库中的TcpListener,而不是标准库中的。

用其绑定了地址后,还需要将两者结合、应用一下:

axum::serve(listener, app).await.unwrap();

至此,我们一个最简单的服务器就搭建完成了,此时你就可以运行本程序:cargo run

并可以通过127.0.0.1:3000这个地址,在你的浏览器访问:

image.png

因为我么的根路径get请求所对应的函数只返回了一个字符串,其默认是文本类型、而非html文档,所以这里的背景是黑色的。

至此,我们就学会了axum框架的基本用法,下面,我们开始详解axum提供的各个方面的强大功能。

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux