use actix_web::{get, web, App, HttpResponse, HttpServer, Responder};use serde::{Deserialize, Serialize};
您将使用serde用构件(struct)将消息序列化到客户端 。serde将为客户端将构件转换成JSON 。下面是该消息的构件:
#[derive(Debug, Serialize, Deserialize)]struct Message {message: String,}
现在您可以为端点定义处理程序(handler)函数 。在处理程序函数的顶部,您可以为自定义行为添加装饰符:
#[get("/")]async fn hello() -> impl Responder {HttpResponse::Ok().json(Message {message: "Hello, World!".to_owned(),})}
hello处理程序函数处理GET请求 。该函数返回实现来自Actix软件包的Responder特征的类型 。
HttpResponse::Ok()类型的JSON方法接受Serde在底层处理的构件实例,并将响应返回给客户端 。
定义端点后,您可以启动服务器实例,并将端点挂载到路由上 。
#[actix_web::main]async fn main() -> std::io::Result<()> {HttpServer::new(|| App::new().service(hello)).bind("127.0.0.1:8080")?.run().await}
HttpServer::new函数是一个新的服务器实例 。main函数启动,服务器用新的应用程序实例挂载hello处理程序函数 。bind方法将服务器绑定到指定的URL,run函数运行服务器 。
文章插图
四、使用Rocket构建简单的Web服务器Rocket很简约,所以您可以构建简单的Web服务器,无需任何依赖项(除了Rocket库外) 。
下面介绍如何使用Rocket创建带有Hello World!端点的简单服务器:
首先,为服务器导入必要的依赖项 。
#![feature(proc_macro_hygiene, decl_macro)]#[macro_use]extern crate rocket;// imports from the Rocket crateuse rocket::response::content;use rocket::State;
#![feature(proc_macro_hygiene, decl_macro)]属性为Rocket框架启用了Rust实验特性 。#[macro_use]属性从Rocket模块导入宏 。
下面是一个处理程序函数,接到请求时提供html:
#[get("/")]fn hello_world() -> content::Html<&'static str> {content::Html("<h1>Hello, world!</h1>")}
hello_world函数返回一个HTML静态字符串,含有content:: HTML函数 。
下面是服务器的配置构件声明(Rocket框架约定):
struct Config {port: u16,}#[get("/port")]fn port(config: State<Config>) -> String {format!("Server running on port {}", config.port)}
运行服务器时,可以向/port端点请求端口状态 。最后,您将使用ignite函数创建一个服务器实例 。添加配置、挂载路由,并启动服务器:
fn main() {let config = Config { port: 8000 };rocket::ignite().manage(config).mount("/", routes![hello_world, port]).launch();}
config变量是config构件的一个实例 。ignite函数启动服务器实例,manage方法为服务器添加配置,mount方法在基本路由上挂载处理程序函数 。最后,launch方法启动服务器以侦听指定的端口 。五、借助WASM使用Rust构建功能强大的Web应用程序WebAssembly(WASM)是一种二进制指令格式,是为了在浏览器及其他设备上执行而设计的 。WASM提供了一种低级字节码格式,Rust等高级编程语言可以将其用作编译目标 。
借助WASM,您可以将Rust代码编译成大多数流行浏览器都可以执行的二进制格式 。WASM为使用Rust构建健壮的Web应用程序(包括全栈Web应用程序)提供了无限的可能 。
原文链接:https://www.makeuseof.com/build-http-web-server-in-rust/
推荐阅读
- 硒鼓究竟能不能反复使用?看完就明白了
- Chat GPT替代的是不会使用AI的人
- |鱼有胃吗?如何消化食物?钓鱼时给鱼促消化的方法
- 人际关系|如何在职场中管理和维护自己的职业形象和信誉?
- |《火炬之光:无限》新人攻略!新手前期开荒角色如何选择?
- 翡翠|如何判断翡翠原石是泥浆皮还是砂皮?
- 招聘|探索MBTI-95:思考型(T)如何在职场中做好冲突解决
- |如何在职场中应对和解决各种挑战和问题?
- |比老板还要霸道的同事,如何相处?
- |如何应对上司的刁难?八件事让你从容应对