24个版本
0.6.0 | 2024年2月2日 |
---|---|
0.5.2 | 2022年6月13日 |
0.5.1 | 2021年3月23日 |
0.5.0-beta.5 | 2020年9月13日 |
0.2.6 | 2020年3月18日 |
在 异步 中排名 151
每月下载量 280
在 4 crates 中使用
125KB
2.5K SLoC
xtra
一个小巧、快速且安全的actor框架。它基于Actix(版权和许可协议 在此)。
功能
- 安全: xtra中没有不安全代码。
- 小巧: xtra大约有2000行代码。
- 轻量级: xtra依赖项很少,其中大部分都是轻量级的(除了
futures
)。 - 异步
Handler
接口,允许使用async
/await
语法与&mut self
。 - 不依赖于自己的运行时,可以使用任何futures executor运行。为 Tokio、async-std、smol 和 wasm-bindgen-futures 提供方便的
spawn
函数。 - 相当快。在我的开发机上,使用Tokio运行,从发送消息到处理并再次发送,不等待结果的时间为 <170ns。
示例
use xtra::prelude::*;
#[derive(Default, xtra::Actor)]
struct Printer {
times: usize,
}
struct Print(String);
impl Handler<Print> for Printer {
type Return = ();
async fn handle(&mut self, print: Print, _ctx: &mut Context<Self>) {
self.times += 1;
println!("Printing {}. Printed {} times so far.", print.0, self.times);
}
}
#[tokio::main]
async fn main() {
let addr = xtra::spawn_tokio(Printer::default(), None);
loop {
addr.send(Print("hello".to_string()))
.await
.expect("Printer should not be dropped");
}
}
要查看更长的示例,请查看使用xtra和spaad在服务器上编写的聊天应用 Vertex。
听起来很棒!我该如何使用它?
查看文档和示例以开始使用!启用tokio
、async_std
、smol
或wasm_bindgen
功能以使用一些便利方法(例如xtra::spawn_tokio
)。您启用哪些功能将取决于您想使用哪个执行器(查看它们的文档以了解更多关于每个执行器的信息)。如果您有任何问题,请随时提交问题或在Rust discord上给我留言。
请注意,xtra
的MSRV为1.60.0。
Cargo功能
async_std
:启用与async-std的集成。smol
:启用与smol的集成。注意,这需要smol 1.1,因为1.1与1.0相比有细微的破坏性更改,导致xtra无法在1.0和1.1上同时编译。tokio
:启用与tokio的集成。wasm_bindgen
:启用与wasm-bindgen及其futures crate的集成。instrumentation
:添加对tracing
的依赖,并在actor上创建消息发送和处理的范围。sink
:添加Address::into_sink
和MessageChannel::into_sink
。macros
:启用Actor
自定义推导宏。
最新破坏性更改
要查看每个版本的破坏性更改,请参阅此处。最新版本是0.6.0。
依赖关系
~0.8–13MB
~147K SLoC