【Tokio】TCP 伺服器
阿新 • • 發佈:2022-03-31
環境
- Time 2022-01-13
- Rust 1.57.0
- Tokio 1.15.0
概念
參考:https://docs.rs/tokio/latest/tokio/index.html
之前使用 Mio
實現了一個簡單的 TCP 伺服器,再使用 Tokio
實現。
練習使用,不可用於生產環境。
示例
main.rs
use tokio::io::{AsyncReadExt, AsyncWriteExt, Result}; use tokio::net::{TcpListener, TcpStream}; #[tokio::main] async fn main() -> Result<()> { let listener = TcpListener::bind("127.0.0.1:4444").await?; loop { let (client, address) = listener.accept().await?; println!("客戶端: {}", address); tokio::spawn(process_socket(client)); } } async fn process_socket(mut client: TcpStream) -> Result<()> { let mut buffer = vec![0; 4096]; loop { let size = client.read(&mut buffer).await?; if size == 0 { println!("{} 連線已關閉", client.peer_addr()?); return Ok(()); } let str = std::str::from_utf8(&buffer[..size]).unwrap(); println!("收到資料:{}", str); client.write_all(str.to_uppercase().as_bytes()).await?; } }
總結
使用 Tokio 實現 TCP 伺服器的功能。