//! Echo example. //! Use `nc 127.0.0.1 30000` to connect. use futures::StreamExt; use mini_rust_runtime::executor::Executor; use mini_rust_runtime::tcp::TcpListener; use tokio::io::{AsyncReadExt, AsyncWriteExt}; fn main() { let ex = Executor::new(); // 执行器实例 ex.block_on(test); // 协程最开始的地方 } async fn test(){ let test1 = serve; let test2= serve2; // 并发执行 test1 test2 let ((),()) = futures::join!(test1(), test2()); } async fn serve2(){ let mut listener2 = TcpListener::bind("127.0.0.1:30001").unwrap(); // 绑定地址:端口 while let Some(ret) = listener2.next().await { if let Ok((mut stream, addr)) = ret { println!("accept a new connection from {} successfully", addr); let f = async move { let mut buf = [0; 4096]; loop { match stream.read(&mut buf).await { Ok(n) => { if n == 0 || stream.write_all(&buf[..n]).await.is_err() { // 回写 return; } } Err(_) => { return; } } } }; Executor::spawn(f); } } } async fn serve() { let mut listener = TcpListener::bind("127.0.0.1:30000").unwrap(); // 绑定地址:端口 while let Some(ret) = listener.next().await { if let Ok((mut stream, addr)) = ret { println!("accept a new connection from {} successfully", addr); let f = async move { let mut buf = [0; 4096]; loop { match stream.read(&mut buf).await { Ok(n) => { if n == 0 || stream.write_all(&buf[..n]).await.is_err() { // 回写 return; } } Err(_) => { return; } } } }; Executor::spawn(f); } } }