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
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