1 个不稳定版本
0.2.0 | 2019 年 10 月 28 日 |
---|
#8 in #nng
125KB
3K SLoC
Rust 高级包装库,用于 NNG (Nanomsg-Next-Gen)
NNG,就像其前辈 nanomsg(以及某种程度上 ZeroMQ)一样,是一个轻量级的无代理库,提供简单的 API 以解决常见的重复性问题,例如发布/订阅、RPC 风格的请求/回复或服务发现。该 API 释放了程序员担心诸如连接管理、重试和其他常见考虑的细节,使他们能够专注于应用程序而不是管道。
特性
- 使用 nng_aio 进行异步 I/O
- 使用 nng_ctx 进行高级协议处理
- 利用 futures 库,以简化与 tokio 的使用,并最终支持
async
/await
示例
简单
use runng::{
Dial, Listen, RecvMsg, SendMsg,
factory::latest::ProtocolFactory,
msg::NngMsg,
protocol::*,
};
fn simple_reqrep() -> Result<(), runng::Error> {
const url: &str = "inproc://test";
let factory = ProtocolFactory::default();
let rep = factory.replier_open()?.listen(&url)?;
let req = factory.requester_open()?.dial(&url)?;
req.sendmsg(NngMsg::create()?)?;
rep.recv()?;
Ok(())
}
异步 I/O
use futures::{
future::Future,
stream::Stream,
};
use runng::{
Dial, Listen,
asyncio::*,
factory::latest::ProtocolFactory,
msg::NngMsg,
protocol::*,
};
fn async_reqrep() -> Result<(), runng::Error> {
const url: &str = "inproc://test";
let factory = ProtocolFactory::default();
let mut rep_ctx = factory.replier_open()?.listen(&url)?.create_async()?;
let mut req_ctx = factory.requester_open()?.dial(&url)?.create_async()?;
let req_future = req_ctx.send(NngMsg::create()?);
let _request = rep_ctx.receive().wait()?;
rep_ctx.reply(NngMsg::create()?).wait()??;
req_future.wait().unwrap()?;
Ok(())
}
更多示例 在 examples/
文件夹中 和 runng_examples
依赖项
~6.5MB
~153K SLoC