#traits #offers #message #async-trait #async-std #zero-cost #obj-comms

qcomms

qcomms 是一个小型库,提供了一种简单、零成本的消息传递特征。不使用 async-trait

5 个版本 (2 个稳定版)

1.0.1 2021 年 7 月 31 日
0.3.0 2021 年 5 月 19 日
0.2.0 2021 年 5 月 17 日
0.1.0 2021 年 4 月 19 日

#1662 in Rust 模式

MPL-2.0 许可证

14KB
327

QCOMMS

qcomms 是一个小型库,提供了一种简单的消息传递特征。它还提供了心跳和其它流辅助功能。

use qcomms::ObjComms;
use serde::{Serialize, Deserialize};
use async_std::task;
use async_std::task::sleep;
use async_std::net::{TcpListener, TcpStream};

#[derive(Serialize, Deserialize, Debug)]
pub struct Message {
    hello: String,
    val: u32,
}

#[async_std::main]
async fn main() {
    task::spawn(async move {
        let listener = TcpListener::bind("127.0.0.1:3022").await.unwrap();
        let (mut stream, _) = listener.accept().unwrap();
        let message: Message = stream.rx().await.unwrap();
        println!("{:?}", message);
    });

    let m = Message {
        hello: "hello".to_string(),
        val: 12,
    };

    task::sleep(Duration::from_secs(1)).await;
    let mut stream = TcpStream::connect("127.0.0.1:3022").await.unwrap();
    stream.tx(&m).await.unwrap();
}

lib.rs:

qcomms 只与 async std 兼容。这一决定是为了使用户不局限于 tokio 生态系统

依赖关系

~6–18MB
~218K SLoC