2个不稳定版本

0.2.0 2023年11月7日
0.1.0 2023年10月28日

#1539 in 异步

MIT 许可证

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