Rust Tokio 并发与异步 I/O 实战基本示例use tokio::{net::TcpListener, io::{AsyncReadExt, AsyncWriteExt}};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let listener = TcpListener::bind("127.0.0.1:8080").await?;
loop {
let (mut sock, _) = listener.accept().await?;
tokio::spawn(async move {
let mut buf = [0u8; 1024];
if let Ok(n) = sock.read(&mut buf).await {
let _ = sock.write_all(&buf[..n]).await;
}
});
}
}
select! 与超时use tokio::{time::{timeout, Duration}, select};
async fn work() {
// ...
}
async fn run() {
let t = timeout(Duration::from_secs(2), work());
select! {
_ = t => { /* 正常完成或超时 */ },
_ = tokio::signal::ctrl_c() => { /* 优雅退出 */ },
}
}
连接与背压使用 `TcpStream::set_nodelay(false)` 保持 Nagle,视场景选择通过限流与队列控制避免写放大与背压失控监控与测试`cargo bench` 与 `tokio-console` 观察任务与资源总结Tokio 提供高效的任务调度与 I/O 原语,通过合理的超时与背压策略,可构建稳定的并发服务。

发表评论 取消回复