diff options
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/echo.rs | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/examples/echo.rs b/examples/echo.rs index 3f01cf7..2df9c1d 100644 --- a/examples/echo.rs +++ b/examples/echo.rs @@ -8,11 +8,44 @@ use tokio::io::{AsyncReadExt, AsyncWriteExt}; fn main() { let ex = Executor::new(); // 执行器实例 - ex.block_on(serve); // 协程最开始的地方 + 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(); + 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); @@ -22,6 +55,7 @@ async fn serve() { match stream.read(&mut buf).await { Ok(n) => { if n == 0 || stream.write_all(&buf[..n]).await.is_err() { + // 回写 return; } } |
