actix/actix:Rust語言的Actor框架
Rust 的 Actor 框架。
使用方法:
在Cargo.toml加入:
[dependencies] actix = "0.12" |
定義一個actor,你需要定義一個結構體並讓它實現Actor trait,通過其start和create方法可以生成新的actor 。它提供了幾種不同的建立actor的方法,started,stopping和stopped方法是其生命週期。
use actix::{Actor, Addr, Context, System}; struct MyActor; impl Actor for MyActor { type Context = Context<Self>; fn started(&mut self, ctx: &mut Self::Context) { println!("I am alive!"); System::current().stop(); // <- stop system } } fn main() { let mut system = System::new(); let addr = system.block_on(async { MyActor.start() }); system.run(); } |
Actix 使用Tokio執行時。System::new()建立一個新的事件迴圈。System.run()啟動 Tokio 事件迴圈,並在參與者System收到SystemExit訊息後結束。
接受訊息
Actor 通過傳送訊息與另一個 Actor 進行通訊。
use actix::prelude::*; // this is our Message // we have to define the response type (rtype) #[derive(Message)] #[rtype(result = "usize")] struct Sum(usize, usize); // Actor definition struct Calculator; impl Actor for Calculator { type Context = Context<Self>; } // now we need to implement `Handler` on `Calculator` for the `Sum` message. impl Handler<Sum> for Calculator { type Result = usize; // <- Message response type fn handle(&mut self, msg: Sum, ctx: &mut Context<Self>) -> Self::Result { msg.0 + msg.1 } } #[actix::main] // <- starts the system and block until future resolves async fn main() { let addr = Calculator.start(); let res = addr.send(Sum(10, 5)).await; // <- send message and get future for result match res { Ok(result) => println!("SUM: {}", result), _ => println!("Communication to the actor has failed"), } } |
相關文章
- actix/actix-web:Actix Web 是一個功能強大、實用且速度極快的 Rust 網路框架。WebRust框架
- Axum vs Actix vs Rocket
- Rust中的範型程式設計-Exonum是如何從Iron轉移到Actix-webRust程式設計Web
- 幾乎完全重寫的actix-session 0.6.0釋出Session
- 用 actix-Web 2.0-α 寫了一個小工具Web
- 製作 Rust 語言堪比 Mybatis 的非同步 ORM 框架RustMyBatis非同步ORM框架
- 簡單效能測試:springboot-2.x vs actix-web-4.x benchmarkSpring BootWeb
- 製作 Rust 語言非同步 ORM 框架(Mybatis)第二彈Rust非同步ORM框架MyBatis
- Rust語言4歲了 | rust-langRust
- Rust 語言學習之旅Rust
- 實戰逆向RUST語言程式Rust
- Rust 語言學習之旅(6)Rust
- Rust 語言學習之旅(3)Rust
- Rust 語言學習之旅(2)Rust
- Rust 語言學習之旅(7)Rust
- Rust語言快速安裝指南Rust
- 從Julia到Rust語言的學習 - miguelrazRust
- Rust語言與Go語言各自特點概要比較 –thenewstackRustGo
- Rust語言記憶體管理之妙Rust記憶體
- Rust語言炒作過分了嗎? - thenewwazooRust
- Linux核心加入了Rust語言支援LinuxRust
- Rust語言的核心開發團隊有毒 - HackMDRust
- Rust 語言的全鏈路追蹤庫 tracingRust
- badamczewski/PowerUp:Rust/Go語言的反編譯工具RustGo編譯
- Meta將Rust語言納入其伺服器端程式語言Rust伺服器
- 2019年Rust語言調查報告Rust
- Rust入門系列之語言特性 - 1Rust
- 2021年Rust語言調查結果Rust
- Go和Rust都是系統語言和通用語言 - RedditGoRust
- 從錯誤處理看 Rust 的語言和 Go 語言的設計RustGo
- [譯] Rust 語言案例研究:社群使得 Rust 成為 npm 的簡單選擇RustNPM
- doyoubi/undermoon:Rust語言編寫的Redis叢集方案RustRedis
- rulex:Rust一種新的正規表示式語言Rust
- 多種語言後端流行的框架後端框架
- 使用 Rust 語言編寫 Java JNI 實現RustJava
- 使用Rust語言實現帕斯卡三角Rust
- Apache Dubbo 社群召集 Rust 語言開發者ApacheRust
- Rust語言最獨特的特點是什麼? - RedditRust