#actor #async #tokio #future #actor-framework #xtor

xtor_derive

为 xtor 提供衍生宏

2 个版本

0.9.9 2022年5月30日
0.9.0 2022年5月12日

#69 in #actors


xtor 中使用

MIT 许可证

6KB
82

Xtor:一个异步actor处理框架。

CI Crates

主要特性

  • 小巧:非常小的代码库
  • 异步:允许你在actor中编写异步代码
  • 功能齐全:内置了如 Supervisor Broker Caller 等类型
  • 动态且快速:类型化消息和弱类型事件。

用法

xtor 添加到您的库中

cargo add xtor

编写一些代码

use anyhow::Result;
use async_trait::async_trait;
use xtor::actor::{context::Context, message::Handler, runner::Actor};

// first define actor
struct HelloActor;
impl Actor for HelloActor {}

// then define message
#[xtor::message(result = "()")]
#[derive(Debug)]
struct Hello;

// then impl the handler
#[async_trait]
impl Handler<Hello> for HelloActor {
    async fn handle(&self, _ctx: &Context, msg: Hello) -> Result<()> {
        println!("{:?} received", &msg);
        Ok(())
    }
}

// main will finish when all actors died out.
#[xtor::main]
async fn main() -> Result<()> {
    let hello_actor = HelloActor;
    let hello_actor_address = hello_actor.spawn().await?;
    hello_actor_address.call::<HelloActor, Hello>(Hello).await
}

项目结构

  • src/actor/* 用于纯异步actor实现
  • src/utils/* 用于工具类型和默认实现,如
    • DefaultBroker
    • DefaultSupervisor
    • Service

参考

依赖

~1.5MB
~35K SLoC