18 个版本 (7 个破坏性更新)
0.11.1 |
|
---|---|
0.11.0 |
|
0.10.0 |
|
0.2.1 | 2021 年 5 月 11 日 |
#12 in #message-pack
每月 45 次下载
52KB
1K SLoC
rmp-ipc
通过 TCP 使用 Rust MessagePack 进行进程间通信。
使用方法
客户端
use rmp_ipc::{callback, Event, context::Context, IPCBuilder, error::Result};
/// Callback ping function
async fn handle_ping(ctx: &Context, event: Event) -> Result<()> {
println!("Received ping event.");
ctx.emitter.emit_response(event.id(), "pong", ()).await?;
Ok(())
}
#[tokio::main]
async fn main() {
// create the client
let ctx = IPCBuilder::new()
.address("127.0.0.1:2020")
// register callback
.on("ping", callback!(handle_ping))
.build_client().await.unwrap();
// emit an initial event
let response = ctx.emitter.emit("ping", ()).await?.await_response(&ctx).await?;
}
服务器
use rmp_ipc::{IPCBuilder, callback};
// create the server
#[tokio::main]
async fn main() {
IPCBuilder::new()
.address("127.0.0.1:2020")
// register callback
.on("ping", callback!(ctx, event, async move {
println!("Received ping event.");
Ok(())
}))
.build_server().await.unwrap();
}
命名空间
客户端
use rmp_ipc::IPCBuilder;
// create the client
#[tokio::main]
async fn main() {
let ctx = IPCBuilder::new()
.address("127.0.0.1:2020")
// register namespace
.namespace("mainspace-client")
// register callback (without macro)
.on("ping", |_ctx, _event| Box::pin(async move {
println!("Received ping event.");
Ok(())
}))
.build()
.build_client().await.unwrap();
// emit an initial event
let response = ctx.emitter.emit_to("mainspace-server", "ping", ()).await?
.await_response(&ctx).await?;
}
服务器
use rmp_ipc::{IPCBuilder, EventHandler, namespace, command, Event, context::Context};
// create the server
pub struct MyNamespace;
impl MyNamespace {
async fn ping(_ctx: &Context, _event: Event) -> Result<()> {
println!("My namespace received a ping");
Ok(())
}
}
impl NamespaceProvider for MyNamespace {
fn name() -> &'static str {"my_namespace"}
fn register(handler: &mut EventHandler) {
events!(handler,
"ping" => Self::ping
);
}
}
#[tokio::main]
async fn main() {
IPCBuilder::new()
.address("127.0.0.1:2020")
// register namespace
.namespace("mainspace-server")
// register callback
.on("ping", |_ctx, _event| Box::pin(async move {
println!("Received ping event.");
Ok(())
}))
.build()
.add_namespace(namespace!(MyNamespace))
.build_server().await.unwrap();
}
基准测试
基准测试在每个提交时生成。它们可以在这里进行审查。
许可证
Apache-2.0
依赖关系
~3–12MB
~122K SLoC