如何使用Rust构建基本的HTTP Web Server?( 二 )


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函数运行服务器 。
 

如何使用Rust构建基本的HTTP Web Server?

文章插图
 
四、使用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/




推荐阅读