#zeromq #nng #nanomsg #async-io

runng

基于 nng (Nanomsg-Next-Generation) 的高层封装,即 Nanomsg2

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

MIT 许可证

130KB
3K SLoC

Rust 对 NNG (Nanomsg-Next-Gen) 的高层封装

NNG,像其前辈 nanomsg(以及在一定程度上 ZeroMQ)一样,是一个轻量级、无代理的库,提供简单的API来解决常见的消息传递问题,如发布/订阅、RPC风格的请求/响应或服务发现。API使程序员从关注连接管理、重试等细节中解放出来,从而能够专注于应用程序而不是管道。

特性

示例

简单示例

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