11 个版本 (6 个重大更新)

0.7.0 2022 年 3 月 31 日
0.6.0 2021 年 6 月 25 日
0.5.0 2021 年 3 月 24 日
0.4.2 2020 年 10 月 26 日
0.3.0 2020 年 3 月 11 日

#604 in 异步

Download history 465/week @ 2024-03-13 247/week @ 2024-03-20 320/week @ 2024-03-27 360/week @ 2024-04-03 321/week @ 2024-04-10 119/week @ 2024-04-17 222/week @ 2024-04-24 153/week @ 2024-05-01 218/week @ 2024-05-08 201/week @ 2024-05-15 209/week @ 2024-05-22 204/week @ 2024-05-29 56/week @ 2024-06-05 232/week @ 2024-06-12 215/week @ 2024-06-19 112/week @ 2024-06-26

每月 623 次下载

MIT/Apache

11KB
220

actix-daemon-utils

actix 守护进程工具。

文档

功能

  • 通过信号优雅地停止(挂起、中断、退出或终止)
  • 循环守护进程(looper 或 delayer)

待办事项

示例

use actix_daemon_utils::{
    actix::{
        prelude::*,
        System,
    },
    graceful_stop::{GracefulStop},
    looper::{Looper, Task},
};
use std::{
    sync::mpsc,
    thread,
    time::Duration,
};

struct MyActor { msg: String, seconds: u64 }

impl Actor for MyActor {
    type Context = Context<Self>;
}

impl Handler<Task> for MyActor {
    type Result = Option<std::time::Duration>;

    fn handle(&mut self, _msg: Task, _ctx: &mut Self::Context) -> Self::Result {
        println!("{}", self.msg);
        Some(Duration::from_secs(self.seconds))
    }
}

// Note. #[actix::main] don't work. I don't know how to deal with.
fn main() {
    let (tx, rx) = mpsc::channel::<()>();

    let sys = System::new();
    let graceful_stop = GracefulStop::new_with_sender(tx);
    sys.block_on( async { 
        let actor1 = MyActor { msg: "x".to_string(), seconds: 1 }.start();
        let actor2 = MyActor { msg: "y".to_string(), seconds: 3 }.start();
        let looper1 = Looper::new(actor1.recipient(), graceful_stop.clone_system_terminator()).start();
        let looper2 = Looper::new(actor2.recipient(), graceful_stop.clone_system_terminator()).start();
        graceful_stop
            .subscribe(looper1.recipient())
            .subscribe(looper2.recipient())
            .start();
        });

    let sys2 = System::current();
    thread::spawn(move || {
        rx.recv().unwrap();

        println!("ended");

        sys2.stop();
    });

    let _ = sys.run();

    println!("main terminated");
}

依赖项

~4–16MB
~152K SLoC