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

  发布时间:2025-12-07 19:49:24   作者:玩站小弟   我要评论
译者 | 布加迪审校 | 重楼51CTO读者成长计划社群招募,咨询小助手微信号:TTalkxiaozhuli)HTTP利用客户端/服务器架构来传输信息和数据。Rust等服务器端编程语言的特性之一是,开 。

译者 | 布加迪

审校 | 重楼

51CTO读者成长计划社群招募 ,何使咨询小助手(微信号 :TTalkxiaozhuli)

HTTP利用客户端/服务器架构来传输信息和数据 。建基Rust等服务器端编程语言的何使特性之一是 ,开发用于与基于HTTP的建基服务交互的服务器和客户端应用程序。

Rust因其安全性 、何使性能和可靠性等特性而适合构建HTTP服务器系统 。建基Rust的何使第三方库(比如Actix和Rocket)因构建能够处理高流量的复杂Web服务器而大受欢迎 。

一 、建基为什么应该使用Rust进行HTTP Web服务器开发?何使

Rust在Web服务器开发方面大受欢迎 ,因为该语言的建基一些特性正是高防服务器构建大多数Web服务器所需要的  。

使用Rust可以确保应用程序有效扩展,何使使该语言成为构建高性能应用程序的建基理想语言 。以下是何使考虑为Web服务器及其他服务器端应用程序使用Rust的几个具体原因  。

1.Rust的建基高性能

高性能是Rust成为构建HTTP Web服务器绝佳选择的原因之一。Rust提供了对系统资源(包括内存和CPU)的何使低级访问,使您能够编写比其他服务器端语言使用更少资源运行得更快的代码 。云计算

此外   ,Rust的所有权机制不需要编译时收集垃圾,这是一些服务器端语言速度较慢的原因之一 。

2.安全和保障

Rust的内存管理所有权机制使得该语言对于Web服务器开发而言很安全 。您不会遇到可能导致内存泄漏及其他安全漏洞的空指针或悬空指针引用。

Rust的所有权机制可以防止这些常见错误 ,为您的服务器和应用程序确保安全。Rust还专注于防止缓冲区溢出及其他与内存相关的错误 。源码下载

3.并发性

并发性是指能够以无序的方式运行程序的多个单元而不影响输出 。并发程序的输出应该与异步程序的输出相同。

并发性会显著影响应用程序的性能 ,因为服务器需要同时处理多个请求。Rust支持与轻量级线程模型共存。

Rust中并发编程的优势在于 ,所有权机制让您可以编写线程安全的代码 ,不需要锁及其他同步原语。亿华云

4.Rust提供现代工具

Rust标准库和Rust生态系统中的第三方软件包为有效的Web服务器开发提供了现代工具 。

Rust的软件包管理器Cargo简化了依赖项管理和构建流程。此外 ,Rust还通过Rust Analyzer等工具提供了出色的IDE支持 ,这类工具提供了无缝代码补全  、错误高亮显示及其他特性。

二 、Actix库和Rocket库概述

Rust的标准库拥有构建Web服务器所需的大部分实用程序 。像Rocket和Actix这样的第三方库简化了用Rust服务器端应用程序的源码库工作 。

Actix和Rocket是流行的Rust Web框架 ,但它们的库在设计和特性上有所不同 。

Rocket是一种高级Web框架 ,注重生产力和易用性 。Rocket为使用Rust构建Web应用程序提供了大量的抽象和语法元素。Rocket也因其强大的类型和直观的API设计而颇受欢迎。

您可以在Cargo.toml文件中添加Rocket作为项目依赖项 ,从而开始使用Rust构建Web应用程序:

复制[dependencies]rocket = "0.4.11"1.2.3.

另一方面 ,建站模板Actix-web是一个注重性能和可扩展性的低级框架 。Actix利用了基于actor的并发模型,提供了非阻塞I/O  ,这使得该软件包成为构建高性能Web应用程序的理想选择 。

在Cargo.toml文件的依赖项部分中添加Actix作为项目依赖项 :

复制[dependencies]actix-web = "4.3.1"1.2.3.

为项目选择一个库将取决于您项目的规范 、库的特性以及您在使用Rust和HTTP方面的经验 。

三、使用Rust构建简单的Web服务器

在创建Rust项目并将任何Rocket或Actix框架添加到Cargo.toml文件中的项目依赖项之后,您已准备好开始使用Rust构建Web服务器了。

使用Actix构建简单的Web服务器

使用Rust构建Web服务时,您可以为请求使用序列化器。

Serde是一个流行的Rust库 ,用于在Rust类型与JSON 、YAML和TOML等数据格式之间序列化和反序列化数据 。Serde提供了一个框架 ,用于定义Rust数据结构与其他数据格式的对应表示之间的数据转换。

下面是为您的项目添加Serde作为第三方软件包的指令。

复制[dependencies]serde = { version = "1.0.159" , features = ["derive"] }1.2.3.

一旦您添加了Serde和Actix作为项目依赖项 ,就可以用Rust生成基本的Web服务器。下面介绍了如何创建一个简单的Hello World! Web服务器 ,使用Actix将字符串写入到客户端  :

首先,从actix_web库和serde库导入必要的模块和类型  :

复制use actix_web::{ get, web, App, HttpResponse, HttpServer, Responder};use serde::{ Deserialize, Serialize};1.2.3.

您将使用serde用构件(struct)将消息序列化到客户端。serde将为客户端将构件转换成JSON 。下面是该消息的构件 :

复制#[derive(Debug, Serialize, Deserialize)]struct Message { message: String,}1.2.3.4.5.6.7.

现在您可以为端点定义处理程序(handler)函数  。在处理程序函数的顶部 ,您可以为自定义行为添加装饰符  :

复制#[get("/")]async fn hello() -> impl Responder { HttpResponse::Ok().json(Message { message: "Hello, World!".to_owned(), })}1.2.3.4.5.6.7.8.9.10.11.

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}1.2.3.4.5.6.7.8.9.10.11.12.13.

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 crate

use rocket::response::content;use rocket::State;1.2.3.4.5.6.7.8.9.10.11.

#![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>")}1.2.3.4.5.6.7.

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)}1.2.3.4.5.6.7.8.9.10.11.12.13.

运行服务器时,可以向/port端点请求端口状态。

最后,您将使用ignite函数创建一个服务器实例 。添加配置、挂载路由,并启动服务器:

复制fn main() { let config = Config { port: 8000 }; rocket::ignite() .manage(config) .mount("/", routes![hello_world, port]) .launch();}1.2.3.4.5.6.7.8.9.10.11.12.13.

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/

  • Tag:

相关文章

  • 苹果WiFi定位系统漏洞可监控全球数亿设备

    近日,美国马里兰大学的安全研究人员发表论文披露苹果设备的Wi-Fi定位系统(WPS)存在安全设计缺陷,可用于大规模监控全球用户(不使用苹果设备的人也会被监控),从而导致全球性隐私危机。研究者还在俄乌战
    2025-12-07
  • Fortinet VPN服务器设计缺陷能隐藏攻击者行踪

    据BleepingComputer消息,网络安全厂商Fortinet产品中的VPN 服务器存在一个设计漏洞,其日志记录机制能够隐藏成功实施暴力攻击的行为记录,无法让防御者察觉到系统可能已被入侵。For
    2025-12-07
  • 奋力反击深度伪造的五个有效措施

    译者 | 布加迪审校 | 重楼公司企业正在竭力跟上网络犯罪分子不断创新的步伐。据本人所在公司VikingCloud的报告显示,53%的公司承认自己没有准备好防御新的基于人工智能的网络攻击方法。随着深度
    2025-12-07
  • 黑客成功入侵乐高官网仅获利几百美元

    上周末乐高官网遭遇了一次奇特的黑客攻击。与传统的网络攻击不同,这位技术高超的黑客成功“拿下”全球知名品牌的官网后并未大肆窃取用户信息例如信用卡号)或植入恶意软件在暗网套现谋取暴利,而是“精心策划”了一
    2025-12-07
  • 在 Linux 命令行中更容易完成的12件事

    使用图形用户界面GUI)来执行大多数日常任务可能会比较慢且更加繁琐,这似乎与直觉相悖。在Linux 中,命令行是至尊,而且通常情况下,通过打开终端并输入命令,比使用图形界面软件要快得多,尽管不总是更简
    2025-12-07
  • HP报告:已在野外发现生成式AI制作的恶意软件有效载荷

    最新发布的惠普沃尔夫HP Wolf )安全威胁洞察报告显示,现阶段已在野外出现了使用生成式人工智能GenAI)生成的恶意软件有效载荷,标志着网络威胁形势发生了重大变化,攻击者已利用先进的人工智能工具创
    2025-12-07

最新评论