2个不稳定版本
0.2.0 | 2023年11月7日 |
---|---|
0.1.0 | 2023年10月28日 |
#1539 in 异步
50KB
892 行
Takyon: Rust的一个最小化单线程异步运行时
工作正在进行中!
lib.rs
:
简单的单线程异步运行时
Takyon是一个用于在单个线程上运行future和执行异步IO的异步运行时。它设计得简单、轻量,适用于命令行界面、GUI桌面应用程序、游戏等:任何不需要复杂的多线程运行时的用例
这个crate仍在开发中,目前只支持以下功能
- Linux支持(使用
io_uring
) - 创建和连接子任务
- 休眠
- TCP和UDP网络IO
以下功能计划在未来实现
- 文件IO
- Windows、BSD和MacOS支持
- 任务间通信,如通道、监视、通知等
示例
异步TCP服务器
use takyon::net::TcpListener;
takyon::init().unwrap();
takyon::run(async {
// Create a TcpListener
let listener = TcpListener::bind("127.0.0.1:5000").await.unwrap();
loop {
// Wait for incoming connections
let (stream, src_addr) = listener.accept().await.unwrap();
println!("New connection from {:?}\n", src_addr);
// Spawn task to handle connection
takyon::spawn(async move {
let mut buf = [0; 1024];
// Read data from the TcpStream
loop {
let bytes = stream.read(&mut buf).await.unwrap();
if bytes == 0 {
println!("Address {:?} disconnected\n", src_addr);
break;
}
println!("Read {:?} bytes from address {:?}", bytes, src_addr);
println!("Data: {:02X?}\n", &buf[..bytes]);
}
});
}
});
异步TCP客户端
use std::net::Shutdown;
use takyon::{time::sleep_secs, net::TcpStream};
takyon::init().unwrap();
takyon::run(async {
loop {
// Connect to the server
sleep_secs(1).await;
let stream = TcpStream::connect("127.0.0.1:5000").await.unwrap();
// Write some data
sleep_secs(1).await;
stream.write(&[0xAA, 0xBB, 0xCC]).await.unwrap();
// Shut down the connection
sleep_secs(1).await;
stream.shutdown(Shutdown::Both).await.unwrap();
}
});
依赖项
~150KB