1 个不稳定版本

0.6.0 2024年2月2日

#7#xtra

Download history 3/week @ 2024-04-24 2/week @ 2024-05-01 1/week @ 2024-05-22 4/week @ 2024-05-29 21/week @ 2024-06-05 13/week @ 2024-06-12 27/week @ 2024-06-19 23/week @ 2024-06-26 36/week @ 2024-07-03 6/week @ 2024-07-10 2/week @ 2024-07-17 36/week @ 2024-07-24

每月下载量 82
用于 xtra

MPL-2.0 许可证

3KB

Continuous integration docs.rs Matrix

xtra

一个轻量级、快速、安全的actor框架。它基于Actix(版权和许可证在此)。

特性

  • 安全: xtra中没有不安全代码。
  • 轻量级: xtra的代码量约为2000行。
  • 轻量级: xtra的依赖项很少,其中大部分都是轻量级的(除了futures)。
  • 异步Handler接口,允许使用async/await语法和&mut self
  • 不依赖于自己的运行时,可以使用任何futures执行器。提供了针对Tokioasync-stdsmolwasm-bindgen-futures的方便的spawn函数。
  • 相当快。在我的AMD Ryzen 3 3200G开发机上运行在Tokio上,从发送消息到处理并发送消息的时间为

示例

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");
    }
}

有关更长的示例,请参阅Vertex,这是一个使用xtra和spaad在服务器上编写的聊天应用。

听起来很棒!我该如何使用它?

查看文档示例以开始使用!建议启用tokioasync_stdsmolwasm_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_sinkMessageChannel::into_sink
  • macros:启用Actor自定义派生宏。

最新破坏性更改

要查看每个版本的破坏性更改,请参阅此处。最新版本是0.6.0。

依赖关系

~1.5MB
~36K SLoC