#supervisor #process #ipc #unix-socket #sockets #tokio #inter-process

psup-impl

使用tokio Unix套接字进行进程间通信的进程管理器

12个不稳定版本 (3个破坏性更新)

0.6.4 2021年3月12日
0.6.3 2021年3月12日
0.5.2 2021年3月1日
0.5.0 2021年2月28日
0.3.3 2021年2月28日

#32 in #inter-process

每月32次下载
用于 psup

MIT/Apache

23KB
445 代码行(不含注释)

支持tokio的进程间通信的进程管理器

目前仅支持Unix,以后计划添加对Windows的命名管道支持。

管理器

管理器通过环境和Unix域套接字进行进程间通信来管理发送套接字信息的子进程。如果守护进程在没有被管理器关闭的情况下死亡,则守护进程会重新启动。

use psup_impl::{Error, Result, Task, SupervisorBuilder};

#[tokio::main]
async fn main() -> Result<()> {
   let worker_cmd = "worker-process";
   let mut supervisor = SupervisorBuilder::new()
       .server(|stream, tx| {
            let (reader, mut writer) = stream.into_split();
            tokio::task::spawn(async move {
                // Handle worker connection here
                // Use the `tx` supervisor control channel
                // to spawn and shutdown workers
                Ok::<(), Error>(())
            });
       })
       .path(std::env::temp_dir().join("supervisor.sock"))
       .add_worker(Task::new(worker_cmd).daemon(true))
       .add_worker(Task::new(worker_cmd).daemon(true))
       .build();
   supervisor.run().await?;
   // Block the process here and do your work.
   Ok(())
}

工作进程

工作进程从环境读取套接字信息,然后连接到Unix套接字。

use psup_impl::{Error, Result, Worker};

#[tokio::main]
async fn main() -> Result<()> {
    // Read supervisor information from the environment
    // and set up the IPC channel with the supervisor
    let worker = Worker::new()
        .client(|stream, id| async {
            let (reader, mut writer) = stream.into_split();
            // Start sending messages to the supervisor
            Ok::<(), Error>(())
        });
    worker.run().await?;
    // Block the process here and do your work.
    Ok(())
}

依赖关系

~4–13MB
~140K SLoC