Rust 在 Linux 下的网络编程实践指南
一 开发生态与运行时选择
二 快速上手示例
use std::io::{Read, Write};
use std::net::TcpListener;
fn handle_client(mut stream: std::net::TcpStream) {
let mut buf = [0; 1024];
loop {
match stream.read(&mut buf) {
Ok(0) => break, // 对端关闭
Ok(n) => if let Err(e) = stream.write_all(&buf[..n]) {
eprintln!("write error: {}", e);
break;
},
Err(e) => {
eprintln!("read error: {}", e);
break;
}
}
}
}
fn main() -> std::io::Result<()> {
let listener = TcpListener::bind("127.0.0.1:7878")?;
for stream in listener.incoming() {
match stream {
Ok(s) => std::thread::spawn(|| handle_client(s)),
Err(e) => eprintln!("accept error: {}", e),
}
}
Ok(())
}
use tokio::net::TcpListener;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let listener = TcpListener::bind("127.0.0.1:7878").await?;
loop {
let (mut socket, _) = listener.accept().await?;
tokio::spawn(async move {
let mut buf = [0; 1024];
loop {
let n = match socket.read(&mut buf).await {
Ok(0) => return,
Ok(n) => n,
Err(e) => { eprintln!("read: {}", e); return; }
};
if let Err(e) = socket.write_all(&buf[..n]).await {
eprintln!("write: {}", e);
return;
}
}
});
}
}
三 高性能实践与系统调优
四 实战案例 异步四层 TCP 网关
五 工程化与部署建议