当前位置: 首页 > news >正文

actix-web开发环境搭建

actix web的开发环境搭建


1. 本章目标

  • 引入actix相关依赖
  • 创建一个入门示例
  • 理解原理

2. 核心概念

概念含义示例
async/await异步函数机制async fn run()
Future表示一个异步计算impl Future<Output=T>
tokio runtime异步运行时调度器#[tokio::main]

理解重点:Rust 的异步模型基于“协作式调度”,不是抢占式线程。


3. 代码实践

目录结构

.
├── Cargo.lock
├── Cargo.toml
├── doc
└── src└── main.rs # 应用程序入口

引入依赖

在cargo.toml文件下引入actix-web相关的依赖

[dependencies]
actix-web = "4.11.0"
tokio = { version = "1.47.1",features = ["macros", "rt-multi-thread"]}
  • actix-web是一个高性能的异步web框架
  • tokio提供异步运行时
    • rt-multi-thread启用多线程执行器
    • macros启用相关的过程宏(如#[tokio::main])

代码实现

创建应用程序的入口
use actix_web::{web, App, HttpResponse, HttpServer, Responder};async fn hello()->impl Responder {HttpResponse::Ok().finish()
}#[tokio::main]
async fn main()->std::io::Result<()> {HttpServer::new(||App::new().route("/hello", web::get().to(hello))).bind("127.0.0.1:8000")?.run().await
}
代码分析

main函数

#[tokio::main]
async fn main()->std::io::Result<()>

在Rust中,只有异步函数可以调用异步函数,因此需要给函数添加async代表它是异步,而main函数比较特殊(不能将main设置为异步),所以只能用过程宏了

由于HttpServer::new(/*...*/).bind(/*...*/)返回成功Ok(()),或者返回Err(std::io::Error)代表失败,因此main函数需要返回值Result<()>,这里错误类型的声明可以省略,就使用默认(std::io::Error)

HttpServer

HttpServer::new(||{...}).bind()?.run().await
  1. 通过HttpServer::new()创建一个HttpServer实例,这个方法接受一个闭包作为输入,需要注意的是: 这个闭包必须返回一个App(|| -> App)
  2. 可以调用bind方法配置这个HttpServer实例的Ip和端口
  3. 调用run方法返回一个Server future,此时服务器还没真正启动(不能监听和处理请求)
  4. await会等待Server的完成,而Server不会完成,但通过Ctrl-C等强制退出(服务器停止)

App

App::new().route("/hello", /*Router*/)
  1. App::new函数创建一个新的App实例
  2. 调用route方法,它接受两个参数,第一个是定义了请求的路径,第二个接受一个Route实例,不能直接使用函数
  3. 通过web::get().to(hello)获取一个Route,接受一个异步函数,这个函数的返回值是impl Responder的,HttpResponder实现了Responder trait,因此可以将返回值定义为HttpResponder
http://www.dtcms.com/a/500643.html

相关文章:

  • 建设银行深分行圳招聘网站网站建设虚拟
  • 温州专业手机网站制作多少钱炽乐清网站建设
  • 燕之屋入选轻工业数字化转型“领航者”案例,引领行业智能化升级新篇章
  • 网站开发服务费属于哪种进项上海企业服务云代表啥
  • 给企业做网站的好处德州公司做网站
  • 个人备案可以做门户网站吗文创产品设计方案ppt
  • 登封哪里有做网站的设计一套网站费用
  • 网站建设方案实例阿里云装wordpress
  • 淮南网站开发seo公司软件
  • goofys或者s3fs将Minio桶挂载成本地目录测试记录
  • TENGJUN防水TYPE-C立插连接器:从技术细节到工业价值的深度解析
  • 男女性直接做的视频网站广州开发区官网
  • 门户网站建设的背景和意义哪些网站推广公司
  • 贵州贵阳网站开发容桂网站建设原创
  • React-Router Data Mode路由配置和Suspense懒加载
  • 江西商城网站建设广东省建设工程交易中心网站
  • 建网站知识企业系统管理软件有哪些
  • IotDB常规使用
  • 网站模板 psd最新企业名录搜索软件
  • Vue3-Devtools开发者工具制作与安装
  • emeinet亿玫网站建设app制作开发公司地址
  • 有没有什么专业做美业的网站四川创企科技有限责任公司
  • 芋道源码 - 基于滑块验证码(blockPuzzle), 登录实现
  • 网站关键词优化报价新泰网站开发制作
  • flash静态网站怎么做个人网页
  • Milvus的可视化工具Attu安装
  • 网站备案需要拍照如何建立网站建设规划
  • 【LLIE技术专题】LiteIE :超轻量级无监督低光图像增强框架
  • 百度抓取不到网站网站配色
  • USB -- SET_ADDRESS or --SET_ADDRESS or --SET_CONFIGURATION or --SET_INTERFACE