diff options
| author | luwenpeng <[email protected]> | 2022-10-31 17:03:10 +0800 |
|---|---|---|
| committer | luwenpeng <[email protected]> | 2022-11-03 14:30:58 +0800 |
| commit | 9db73f57c452aa05da55211fd30af568a57857fc (patch) | |
| tree | 237c6b2adaad64da7733638c7fd2ab0c9d88b7f2 /src/main.rs | |
| parent | 54d9885220d2e0cd0167f6cbb10c7b0d9e762df2 (diff) | |
[delete] example/echo.rsHEADlwp-self-study
[update] src/lib.rs -- 增加调试日志
[update] src/main.rs -- 增加调试日志
[update] src/tcp.rs i -- 增加调试日志
[update] src/reactor.rs -- 增加调试日志
[update] src/executor.rs -- 增加调试日志
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..ad85a80 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,51 @@ +// luwenpeng 2022/11/01 + +use futures::StreamExt; +use mini_rust_runtime::executor::Executor; +use mini_rust_runtime::tcp::TcpListener; +use tokio::io::AsyncReadExt; +use tokio::io::AsyncWriteExt; + +fn main() { + let excutor = Executor::new(); + + excutor.block_on(tcp_server); +} + +async fn tcp_server() { + let mut listener = TcpListener::bind("127.0.0.1:30000").unwrap(); + println!("[tcp_server] listen on: 127.0.0.1:30000"); + + // NOTE:listener.next() 其实是调用的 poll_next() + while let Some(ret) = listener.next().await { + if let Ok((mut stream, addr)) = ret { + println!("[tcp_server] accept new connection: {}", addr); + + // 此处只是注册,并不是此时执行 + let future = async move { + let mut buf = [0; 4096]; + loop { + match stream.read(&mut buf).await { + Ok(n) => { + println!("[tcp_server] stream {} read: {}", addr, n); + + if n == 0 || stream.write_all(&buf[..n]).await.is_err() { + println!("[tcp_server] stream {} write: {}", addr, n); + return; + } + } + Err(e) => { + println!("[tcp_server] stream {} read: {}", addr, e); + return; + } + } + } + }; + + // 将 future 封装成 task push 到任务队列中 + println!("[tcp_server] -> befor Executor::spawn()"); + Executor::spawn(future); + println!("[tcp_server] -> after Executor::spawn()"); + } + } +} |
