summaryrefslogtreecommitdiff
path: root/examples/echo.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/echo.rs')
-rw-r--r--examples/echo.rs38
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;
}
}