13 个版本
0.3.2 | 2020年1月14日 |
---|---|
0.3.1 | 2020年1月11日 |
0.2.0 | 2019年10月19日 |
0.1.11 | 2019年1月29日 |
0.1.1 | 2018年10月12日 |
#3 in #nanomsg
每月 45 次下载
用于 runng_thrift
130KB
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(())
}
更多示例在 tests/ 目录 和 runng_examples。
依赖
~6.5MB
~153K SLoC