安裝Rust
通過rustup
安裝Rust,自動配置環境變量:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env # 激活環境
rustup update # 更新至最新版本
創建項目
使用cargo
生成新項目:
cargo new rust_network_demo
cd rust_network_demo
場景 | 推薦庫 | 特點 | 依賴配置(Cargo.toml) |
---|---|---|---|
異步基礎網絡 | Tokio | 高性能異步運行時,支持TCP/UDP/HTTP等,社區成熟 | tokio = { version = "1", features = ["full"] } |
HTTP客戶端 | Reqwest | 簡單易用的HTTP客戶端,支持異步請求和響應 | reqwest = "0.11" |
HTTP服務端 | Actix-Web/Warp | 高性能Web框架,支持路由、中間件、WebSocket等 | actix-web = "4" 或 warp = "0.3" |
WebSocket | Tokio-Tungstenite | 基于Tokio的WebSocket庫,支持異步消息收發 | tokio-tungstenite = "0.17" |
自定義協議 | Tokio + Serde | 基于Tokio的TCP/UDP,配合Serde實現消息序列化/反序列化 | tokio = "1" , serde = { version = "1.0", features = ["derive"] } |
代碼邏輯:監聽端口并回顯客戶端消息
use tokio::net::{TcpListener, TcpStream};
use tokio::io::{AsyncReadExt, AsyncWriteExt};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let listener = TcpListener::bind("127.0.0.1:8080").await?;
println!("Server running on 127.0.0.1:8080");
loop {
let (mut socket, _) = listener.accept().await?;
tokio::spawn(async move {
let mut buffer = [0; 1024];
while let Ok(n) = socket.read(&mut buffer).await {
if n == 0 { break; }
socket.write_all(&buffer[..n]).await.unwrap();
}
});
}
}
運行:cargo run
,通過telnet 127.0.0.1 8080
測試。
代碼邏輯:發送GET請求并打印響應
use reqwest;
#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
let response = reqwest::get("https://httpbin.org/get").await?;
println!("Response: {}", response.text().await?);
Ok(())
}
依賴:需在Cargo.toml
中添加reqwest
和tokio
。
代碼邏輯:構建RESTful API
use actix_web::{get, App, HttpResponse, HttpServer, Responder};
#[get("/hello")]
async fn hello() -> impl Responder {
HttpResponse::Ok().body("Hello, CentOS!")
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().service(hello))
.bind("127.0.0.1:8080")?
.run()
.await
}
運行:cargo run
,訪問http://127.0.0.1:8080/hello
。
cargo build
自動下載庫,復雜項目建議使用cargo.lock
鎖定版本。tokio
的rt-multi-thread
特性提升并行度。firewalld
)限制端口訪問。tokio-rustls
)。README.md
和docs.rs
頁面提供詳細API說明。