#pub-sub #binding #networking #pub #sub

nanomsg

一个针对nanomsg的高级别、Rust风格的封装

16个版本

使用旧Rust 2015

0.7.2 2018年9月14日
0.6.2 2017年4月19日
0.6.1 2016年12月27日
0.6.0 2016年6月10日
0.3.0 2014年12月8日

#1244 in 网络编程

Download history 80/week @ 2024-03-12 66/week @ 2024-03-19 126/week @ 2024-03-26 77/week @ 2024-04-02 38/week @ 2024-04-09 45/week @ 2024-04-16 64/week @ 2024-04-23 47/week @ 2024-04-30 60/week @ 2024-05-07 69/week @ 2024-05-14 52/week @ 2024-05-21 28/week @ 2024-05-28 33/week @ 2024-06-04 42/week @ 2024-06-11 50/week @ 2024-06-18 30/week @ 2024-06-25

159 每月下载量
用于unicorn-rpc

MIT 许可证

130KB
2K SLoC

Nanomsg

Cargo 0.7.2 MIT License Build Status Build status

文档

Nanomsg是一个现代消息库,是ZeroMQ的后继产品,由Martin Sustrik及其同事用C编写。nanomsg库采用MIT/X11许可证。 "nanomsg"是250bpm s.r.o.的商标。

需求

  • Nanomsg 1.1.4

安装nanomsg

make deps

安装

[dependencies]
nanomsg = "0.7.2"

只需导入crate即可使用

extern crate nanomsg;

创建套接字

Nanomsg的基础是Socket。每个套接字都可以是某种类型。套接字类型定义了它的行为和限制(例如,只能发送不能接收)。

use nanomsg::{Socket, Protocol, Error};

/// Creating a new `Pull` socket type. Pull sockets can only receive messages
/// from a `Push` socket type.
fn create_socket() -> Result<(), Error> {
    let mut socket = try!(Socket::new(Protocol::Pull));
    Ok(())
}

现在,每个创建的套接字可以绑定到多个端点。每个绑定都可以返回一个错误,所以我们将利用try!宏。

use nanomsg::{Socket, Protocol, Error};

/// Creating a new `Pull` socket type. Pull sockets can only receive messages
/// from a `Push` socket type.
fn create_socket() -> Result<(), Error> {
    let mut socket = try!(Socket::new(Protocol::Pull));
    
    // Create a new endpoint bound to the following protocol string. This returns
    // a new `Endpoint` that lives at-most the lifetime of the original socket.
    let mut endpoint = try!(socket.bind("ipc:///tmp/pipeline.ipc"));

    Ok(())
}

套接字现在可以使用了!

因为这是一个Pull套接字,我们将实现读取我们接收到的任何消息。

// ... After the endpoint we created, we'll start reading some data.
let mut msg = String::new();
loop {
    try!(socket.read_to_string(&mut msg));
    println!("We got a message: {}", &*msg);
    msg.clear();
}
// ...

那太棒了!但是...没有数据包被发送到套接字,所以我们将无法读取。为了解决这个问题,让我们实现配套的Push套接字。

use nanomsg::{Socket, Protocol, Error};

fn pusher() -> Result<(), Error> {
    let mut socket = try!(Socket::new(Protocol::Push));
    let mut endpoint = try!(socket.connect("ipc:///tmp/pipeline.ipc"));

    socket.write(b"message in a bottle");

    endpoint.shutdown();
    Ok(())
}

贡献者

(顺序任意)

许可证

MIT许可证 (MIT)

  • 版权所有 (c) 2013-2014 贾森·E·阿滕,博士 @glycerine
  • 版权所有 (c) 2014 丹尼尔·法格南 @thehydroimpulse
  • 版权所有 (c) 2015-2018 本尼特·拉巴雷 @blabaere

特此授予任何获得本软件及其相关文档副本(以下简称“软件”)的人免费权限,允许其在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许将软件提供给其他人以便他们执行上述操作,前提是必须遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性。在任何情况下,作者或版权持有人不对任何索赔、损害或其他责任负责,无论该责任是基于合同、侵权或其他法律行为,无论该责任产生于、因之或与软件或其使用或其他操作有关。

依赖关系

~0.4–280KB