axum是Rust生态的web框架新秀,虽然项目成立不久,但github上的star数已超2.8k,其底层依赖的是高性能的Tokio,Tokio这货就不多说了,借用知乎《深入浅出Rust异步编程之Tokio》上的一张图:
 

Rust中的Tokio几乎是同类框架的性能天花板了,而axum在Tokio基础上构建,起点就站在巨人的肩膀上。

先来一个Hello World的入门示例:

[dependencies]
axum="0.4.3"
tokio = { version = "1.0", features = ["full"] }

添加上面的依赖项后,就可以编码了:

use axum::{
routing::get,
Router,
}; #[tokio::main]
async fn main() {
// build our application with a single route
let app = Router::new().route("/", get(|| async { "Hello, World!" })); // run it with hyper on localhost:3000
axum::Server::bind(&"0.0.0.0:3000".parse().unwrap())
.serve(app.into_make_service())
.await
.unwrap();
}

启动后,浏览器里跑一下:

再加几个路由:

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

#[tokio::main]
async fn main() {
// our router
let app = Router::new()
.route("/", get(root))
.route("/foo", get(get_foo).post(post_foo))
.route("/foo/bar", get(foo_bar)); // run it with hyper on localhost:3000
axum::Server::bind(&"0.0.0.0:3000".parse().unwrap())
.serve(app.into_make_service())
.await
.unwrap();
} // which calls one of these handlers
async fn root() -> String {
String::from("hello axum")
}
async fn get_foo() -> String {
String::from("get:foo")
}
async fn post_foo() -> String {
String::from("post:foo")
}
async fn foo_bar() -> String {
String::from("foo:bar")
}

注意:/foo同时绑定了GET及POST方法的路由。可以测试一下:

参考链接:

https://docs.rs/axum/0.4.3/axum/index.html

https://zhuanlan.zhihu.com/p/107820568?from_voters_page=true

https://docs.rs/axum/0.4.3/axum/index.html

Rust:axum学习笔记(1) hello world的更多相关文章

  1. Rust语言学习笔记(7)

    模块 // 兄弟模块 mod network { fn connect() { } } mod client { fn connect() { } } // 父子模块 mod network { fn ...

  2. Rust语言学习笔记(6)

    Traits(特质) // 特质 pub trait Summary { fn summarize(&self) -> String; } pub struct NewsArticle ...

  3. Rust语言学习笔记(5)

    Structs(结构体) struct User { username: String, email: String, sign_in_count: u64, active: bool, } let ...

  4. Rust语言学习笔记(4)

    Variables and Mutability(变量和可变性) 变量声明有三种:不变量(运行期的常量),变量以及(编译期的)常量. 变量可以重复绑定,后声明的变量覆盖前面声明的同名变量,重复绑定时可 ...

  5. 《Rust权威指南》学习笔记——4. 认识所有权

    Rust权威指南学习笔记--认识所有权 什么是所有权 1. 所有权规则 Rust中的每一个值都有一个对应的变量作为它的所有者. 在同一时间内,值有且仅有一个所有者. 当所有者离开自己的作用域时,它持有 ...

  6. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  7. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  8. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  9. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  10. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

随机推荐

  1. 在postman中为每个测试用例添加相同的请求头

    最近在学习的时候看到可以在postman中可以为每个测试用例添加相同的请求头,这个就不用单独去设置了,可以说是非常好用,遂记录一下. 具体设置如下: https://postman.org.cn/

  2. WebAssembly:开启新时代的跨平台

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  3. MFC单文档应用程序引入GDI+

    在MFC中引入GDI+,步骤如下: 1.在需要用到GDI+的文件中添加GDI+文件 1 #include <gdiplus.h> 2 using namespace Gdiplus; 2. ...

  4. 操作系统:详解socket的接口实现

    上节了解了套接字的工作机制和数据结构,但套接字有哪些基本接口实现呢? 套接字接口 套接字接口最初是 BSD 操作系统的一部分,在应用层与 TCP/IP 协议栈之间接供了一套标准的独立于协议的接口. L ...

  5. 区块链共识算法--PoW

    PoW算法为一种概率算法,其共识结果是临时的,随着时间推移或某种强化,共识结果被推翻的概率越来越小,最终称为事实上结果 1 研究 工作量证明(Proof Of Work,简称POW),简单理解就是一份 ...

  6. 树形DP和状压DP

    P1352 没有上司的舞会 作为一道经典例题,几乎学树形 \(DP\) 就得先做它. 设 \(f[i][j]\) ,当 \(j\) 为 \(0\) 时表示第 \(i\) 个人不来,当 \(j\) 为 ...

  7. 面试题:Java并发编程生产者和消费者有序消费问题

    摘要:对于一个资源对象,必须先生产再消费,消费后再生产,如此循环往复.为了解决这个并发问题,提供两种解决方案,一是使用synchronized关键字和Object对象的监听器,二是使用java.uti ...

  8. java 腾讯云、阿里云SMS短信工具类

    引入POM依赖 <!-- 腾讯云SMS SDK --> <dependency> <groupId>com.tencentcloudapi</groupId& ...

  9. [书籍精读]《移动WEB前端高级开发实践》精读笔记分享

    写在前面 书籍介绍:<移动WEB前端高级开发实践>这本书的内容涵盖了移动Web前端开发中的各个关键技术环节.分别从HTML5.CSS3.JavaScript的ECMAScript5和ECM ...

  10. Excel Micro (VBA)