亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

譯者 | 布加迪

審校 | 重樓

51CTO讀者成長計劃社群招募,咨詢小助手(微信號:TTalkxiaozhuli)

HTTP利用客戶端/服務(wù)器架構(gòu)來傳輸信息和數(shù)據(jù)。Rust等服務(wù)器端編程語言的特性之一是,開發(fā)用于與基于HTTP的服務(wù)交互的服務(wù)器和客戶端應(yīng)用程序。

Rust因其安全性、性能和可靠性等特性而適合構(gòu)建HTTP服務(wù)器系統(tǒng)。Rust的第三方庫(比如Actix和Rocket)因構(gòu)建能夠處理高流量的復(fù)雜Web服務(wù)器而大受歡迎。

一、為什么應(yīng)該使用Rust進(jìn)行HTTP Web服務(wù)器開發(fā)?

Rust在Web服務(wù)器開發(fā)方面大受歡迎,因?yàn)樵撜Z言的一些特性正是構(gòu)建大多數(shù)Web服務(wù)器所需要的。

使用Rust可以確保應(yīng)用程序有效擴(kuò)展,使該語言成為構(gòu)建高性能應(yīng)用程序的理想語言。以下是考慮為Web服務(wù)器及其他服務(wù)器端應(yīng)用程序使用Rust的幾個具體原因。

1.Rust的高性能

高性能是Rust成為構(gòu)建HTTP Web服務(wù)器絕佳選擇的原因之一。Rust提供了對系統(tǒng)資源(包括內(nèi)存和CPU)的低級訪問,使您能夠編寫比其他服務(wù)器端語言使用更少資源運(yùn)行得更快的代碼。

此外,Rust的所有權(quán)機(jī)制不需要編譯時收集垃圾,這是一些服務(wù)器端語言速度較慢的原因之一。

2.安全和保障

Rust的內(nèi)存管理所有權(quán)機(jī)制使得該語言對于Web服務(wù)器開發(fā)而言很安全。您不會遇到可能導(dǎo)致內(nèi)存泄漏及其他安全漏洞的空指針或懸空指針引用。

Rust的所有權(quán)機(jī)制可以防止這些常見錯誤,為您的服務(wù)器和應(yīng)用程序確保安全。Rust還專注于防止緩沖區(qū)溢出及其他與內(nèi)存相關(guān)的錯誤。

3.并發(fā)性

并發(fā)性是指能夠以無序的方式運(yùn)行程序的多個單元而不影響輸出。并發(fā)程序的輸出應(yīng)該與異步程序的輸出相同。

并發(fā)性會顯著影響應(yīng)用程序的性能,因?yàn)榉?wù)器需要同時處理多個請求。Rust支持與輕量級線程模型共存。

Rust中并發(fā)編程的優(yōu)勢在于,所有權(quán)機(jī)制讓您可以編寫線程安全的代碼,不需要鎖及其他同步原語。

4.Rust提供現(xiàn)代工具

Rust標(biāo)準(zhǔn)庫和Rust生態(tài)系統(tǒng)中的第三方軟件包為有效的Web服務(wù)器開發(fā)提供了現(xiàn)代工具。

Rust的軟件包管理器Cargo簡化了依賴項管理和構(gòu)建流程。此外,Rust還通過Rust Analyzer等工具提供了出色的IDE支持,這類工具提供了無縫代碼補(bǔ)全、錯誤高亮顯示及其他特性。

二、Actix庫和Rocket庫概述

Rust的標(biāo)準(zhǔn)庫擁有構(gòu)建Web服務(wù)器所需的大部分實(shí)用程序。像Rocket和Actix這樣的第三方庫簡化了用Rust服務(wù)器端應(yīng)用程序的工作。

Actix和Rocket是流行的Rust Web框架,但它們的庫在設(shè)計和特性上有所不同。

Rocket是一種高級Web框架,注重生產(chǎn)力和易用性。Rocket為使用Rust構(gòu)建Web應(yīng)用程序提供了大量的抽象和語法元素。Rocket也因其強(qiáng)大的類型和直觀的API設(shè)計而頗受歡迎。

您可以在Cargo.toml文件中添加Rocket作為項目依賴項,從而開始使用Rust構(gòu)建Web應(yīng)用程序:

[dependencies]

rocket = "0.4.11"

另一方面,Actix-web是一個注重性能和可擴(kuò)展性的低級框架。Actix利用了基于actor的并發(fā)模型,提供了非阻塞I/O,這使得該軟件包成為構(gòu)建高性能Web應(yīng)用程序的理想選擇。

在Cargo.toml文件的依賴項部分中添加Actix作為項目依賴項:

[dependencies]

actix-web = "4.3.1"

 

為項目選擇一個庫將取決于您項目的規(guī)范、庫的特性以及您在使用Rust和HTTP方面的經(jīng)驗(yàn)。

三、使用Rust構(gòu)建簡單的Web服務(wù)器

在創(chuàng)建Rust項目并將任何Rocket或Actix框架添加到Cargo.toml文件中的項目依賴項之后,您已準(zhǔn)備好開始使用Rust構(gòu)建Web服務(wù)器了。

使用Actix構(gòu)建簡單的Web服務(wù)器

 

圖片

 

使用Rust構(gòu)建Web服務(wù)時,您可以為請求使用序列化器。

Serde是一個流行的Rust庫,用于在Rust類型與JSON、YAML和TOML等數(shù)據(jù)格式之間序列化和反序列化數(shù)據(jù)。Serde提供了一個框架,用于定義Rust數(shù)據(jù)結(jié)構(gòu)與其他數(shù)據(jù)格式的對應(yīng)表示之間的數(shù)據(jù)轉(zhuǎn)換。

下面是為您的項目添加Serde作為第三方軟件包的指令。

[dependencies]

serde = { version = "1.0.159" , features = ["derive"] }

 

一旦您添加了Serde和Actix作為項目依賴項,就可以用Rust生成基本的Web服務(wù)器。下面介紹了如何創(chuàng)建一個簡單的Hello World! Web服務(wù)器,使用Actix將字符串寫入到客戶端:

首先,從actix_web庫和serde庫導(dǎo)入必要的模塊和類型:

 

use actix_web::{get, web, App, HttpResponse, HttpServer, Responder};

use serde::{Deserialize, Serialize};
 

您將使用serde用構(gòu)件(struct)將消息序列化到客戶端。serde將為客戶端將構(gòu)件轉(zhuǎn)換成JSON。下面是該消息的構(gòu)件:

 

#[derive(Debug, Serialize, Deserialize)]

struct Message {

    message: String,

}

 

現(xiàn)在您可以為端點(diǎn)定義處理程序(handler)函數(shù)。在處理程序函數(shù)的頂部,您可以為自定義行為添加裝飾符:

 

#[get("/")]

async fn hello() -> impl Responder {

    HttpResponse::Ok().json(Message {

        message: "Hello, World!".to_owned(),

    })

}

 

hello處理程序函數(shù)處理GET請求。該函數(shù)返回實(shí)現(xiàn)來自Actix軟件包的Responder特征的類型。

HttpResponse::Ok()類型的JSON方法接受Serde在底層處理的構(gòu)件實(shí)例,并將響應(yīng)返回給客戶端。

定義端點(diǎn)后,您可以啟動服務(wù)器實(shí)例,并將端點(diǎn)掛載到路由上。

 

#[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函數(shù)是一個新的服務(wù)器實(shí)例。main函數(shù)啟動,服務(wù)器用新的應(yīng)用程序?qū)嵗龗燧dhello處理程序函數(shù)。bind方法將服務(wù)器綁定到指定的URL,run函數(shù)運(yùn)行服務(wù)器。

 

圖片

 

四、使用Rocket構(gòu)建簡單的Web服務(wù)器

Rocket很簡約,所以您可以構(gòu)建簡單的Web服務(wù)器,無需任何依賴項(除了Rocket庫外)。

下面介紹如何使用Rocket創(chuàng)建帶有Hello World!端點(diǎn)的簡單服務(wù)器:

首先,為服務(wù)器導(dǎo)入必要的依賴項。

 

#![feature(proc_macro_hygiene, decl_macro)]

#[macro_use]

extern crate rocket;

// imports from the Rocket crate

use rocket::response::content;

use rocket::State;

 

#![feature(proc_macro_hygiene, decl_macro)]屬性為Rocket框架啟用了Rust實(shí)驗(yàn)特性。#[macro_use]屬性從Rocket模塊導(dǎo)入宏。

下面是一個處理程序函數(shù),接到請求時提供html:

 

#[get("/")]

fn hello_world() -> content::Html<&'static str> {

    content::Html("<h1>Hello, world!</h1>")

}

 

hello_world函數(shù)返回一個HTML靜態(tài)字符串,含有content:: HTML函數(shù)。

下面是服務(wù)器的配置構(gòu)件聲明(Rocket框架約定):

 

struct Config {

    port: u16,

}

#[get("/port")]

fn port(config: State<Config>) -> String {

    format!("Server running on port {}", config.port)

}

運(yùn)行服務(wù)器時,可以向/port端點(diǎn)請求端口狀態(tài)。

最后,您將使用ignite函數(shù)創(chuàng)建一個服務(wù)器實(shí)例。添加配置、掛載路由,并啟動服務(wù)器:

 

fn main() {

    let config = Config { port: 8000 };

    rocket::ignite()

        .manage(config)

        .mount("/", routes![hello_world, port])

        .launch();

}
 

config變量是config構(gòu)件的一個實(shí)例。ignite函數(shù)啟動服務(wù)器實(shí)例,manage方法為服務(wù)器添加配置,mount方法在基本路由上掛載處理程序函數(shù)。最后,launch方法啟動服務(wù)器以偵聽指定的端口。

五、借助WASM使用Rust構(gòu)建功能強(qiáng)大的Web應(yīng)用程序

WebAssembly(WASM)是一種二進(jìn)制指令格式,是為了在瀏覽器及其他設(shè)備上執(zhí)行而設(shè)計的。WASM提供了一種低級字節(jié)碼格式,Rust等高級編程語言可以將其用作編譯目標(biāo)。

借助WASM,您可以將Rust代碼編譯成大多數(shù)流行瀏覽器都可以執(zhí)行的二進(jìn)制格式。WASM為使用Rust構(gòu)建健壯的Web應(yīng)用程序(包括全棧Web應(yīng)用程序)提供了無限的可能。

原文鏈接:https://www.makeuseof.com/build-http-web-server-in-rust/

分享到:
標(biāo)簽:Rust
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定