9个版本
0.2.7 | 2024年3月28日 |
---|---|
0.2.6 | 2024年3月17日 |
0.1.1 | 2024年3月11日 |
287 在 异步
每月下载量540
39KB
669 行
simpl_actor
simpl_actor
是一个Rust库,用于简化Rust应用程序中基于actor的并发。它建立在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。
贡献
欢迎贡献!请随意提交pull请求,创建问题或提出改进建议。
许可证
simpl_actor
可以选择以下许可证之一进行双许可
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
- Apache许可证,版本2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
任选其一。
这意味着您可以选择最适合您项目需求的许可证。
依赖项
~3–5MB
~85K SLoC