9 个版本
0.2.7 | 2024 年 3 月 28 日 |
---|---|
0.2.6 | 2024 年 3 月 17 日 |
0.1.1 | 2024 年 3 月 11 日 |
在 过程宏 中排名 1806
每月下载量 28
用于 simpl_actor
48KB
898 行
simpl_actor
simpl_actor
是一个用于简化 Rust 应用程序中基于 actor 的并发的 Rust 库。它基于 Tokio 构建,利用异步/等待和 tokio mpsc 通道来实现高效直观的 actor 系统实现。
功能
- 简单 Actor 定义:使用 Rust 结构体和属性宏轻松定义 actor。
- 自动消息处理:利用 Rust 的类型系统和异步功能,以最少的代码实现消息处理。
- 异步和同步消息处理:支持异步和同步消息处理,允许灵活的 actor 交互模式。
- 生命周期管理:提供初始化、重启和停止 actor 的生命周期钩子,提供对 actor 生命周期的控制。
快速入门
定义 actor
use simpl_actor::{actor, Actor, Spawn};
#[derive(Actor)]
pub struct CounterActor {
count: i64,
}
#[actor]
impl CounterActor {
pub fn new() -> Self {
CounterActor { count: 0 }
}
#[message]
pub fn inc(&mut self, amount: i64) { ... }
#[message]
pub fn dec(&mut self, amount: i64) { ... }
#[message(infallible)]
pub fn count(&self) -> i64 { ... }
}
与 actor 交互
let counter = CounterActor::new();
let actor = counter.spawn();
actor.inc(2).await?;
actor.dec(1).await?;
let count = actor.count().await?;
消息变体
当你在 simpl_actor
中定义一个消息时,会自动生成两个消息处理函数的变体,用于同步和异步处理。
#[actor]
impl MyActor {
#[message]
fn msg(&self) -> Result<i32, Err> {}
}
// Generates
impl MyActorRef {
/// Sends the messages, waits for processing, and returns a response.
async fn msg(&self) -> Result<i32, SendError>;
/// Sends the message after a delay.
fn msg_after(&self, delay: Duration) -> JoinHandle<Result<Result<i32, Err>, SendError>>;
/// Sends the message asynchronously, not waiting for a response.
fn msg_async(&self) -> Result<(), SendError>;
/// Sends the message asynchronously after a delay.
fn msg_async_after(&self, delay: Duration) -> JoinHandle<Result<(), SendError>>;
}
如果方法没有任何生命周期,则只会生成 _after 和 _async 变体。
换句话说,所有参数都必须是拥有的或 &'static
,否则异步变体才会生成,否则 actor 可能会引用已释放的内存,导致未定义行为 (UB)。
贡献
欢迎贡献!请随意提交拉取请求、创建问题或提出改进建议。
许可
simpl_actor
在以下两种许可下双许可:
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
- Apache许可证,版本2.0(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
由您选择。
这意味着您可以选择最适合您项目需求的许可证。
依赖项
~330–790KB
~19K SLoC