#zeromq #nng #nanomsg #async-io

nng_async

围绕 nng (Nanomsg-Next-Generation) 的高级包装,即 Nanomsg2

1 个不稳定版本

0.2.0 2019 年 10 月 28 日

#8 in #nng

MIT 许可证

125KB
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(())
}

更多示例 examples/ 文件夹中runng_examples

依赖项

~6.5MB
~153K SLoC