Nio is an experimental async runtime for Rust. For more information, check out this article
Nio focuses solely on providing an async runtime, It doesn't include additional utilities like. io
, sync
,
You'll still need to rely on libraries like tokio
for everything else.
Add the following dependency to your Cargo.toml
:
[dependencies]
nio = "0.0.1"
Here is a basic echo server example:
use nio::net::TcpListener;
use std::io;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
#[nio::main]
async fn main() -> io::Result<()> {
let listener = TcpListener::bind("127.0.0.1:8080").await?;
println!("{listener:#?}");
loop {
let (mut stream, addr) = listener.accept().await?;
println!("[INCOMING] {addr:?}");
nio::spawn(async move {
let mut buf = vec![0; 1024];
while let Ok(n) = stream.read(&mut buf).await {
if n == 0 { break }
stream.write_all(&buf[..n]).await.unwrap();
}
});
}
}