#tokio #actor-system #actor #async #simple

truba

基于 tokio 运行时环境的 Rust 最小化 actors

5 个版本

0.1.6 2023 年 12 月 5 日
0.1.5 2023 年 11 月 3 日
0.1.4 2023 年 10 月 17 日
0.1.3 2023 年 8 月 27 日
0.1.2 2023 年 8 月 16 日

#8#actors

MIT 协议

27KB
712

truba

基于 tokio 运行时环境的 Rust 最小化 actors。

[dependencies]
truba = "0.1"
use truba::{Context, Message, MpscChannel};

struct Value(u32);

impl Message for Value {
    type Channel = MpscChannel<Self>;
}

struct MyActor {
    value: u32,
}

impl MyActor {
    fn run(ctx: Context, value: u32) {
        let mut value_in = ctx.receiver::<Value>();
        let mut actor = MyActor { value };

        truba::spawn_event_loop!(ctx, {
            Some(msg) = value_in.recv() => {
                actor.handle_value(msg);
            },
        });
    }

    fn handle_value(&mut self, Value(value): Value) {
        self.value = value;
        println!("receive value {value}");
    }
}

#[tokio::main]
async fn main() {
    let ctx = Context::new();
    MyActor::run(ctx.clone(), 42);

    let sender = ctx.sender::<Value>();
    sender.send(Value(11)).await.ok();
    sender.send(Value(22)).await.ok();

    ctx.shutdown().await;
}

您可以在 examples 目录中找到更多示例。

依赖

~3–10MB
~89K SLoC