15 个版本
使用旧的 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.1.2 | 2015 年 3 月 25 日 |
#8 在 #nanomsg
148 次每月下载
在 2 个crate中使用(通过 nanomsg)
32KB
580 行
Nanomsg
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即可使用
use 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 = Socket::new(Protocol::Pull)?;
Ok(())
}
现在,每个创建的套接字可以绑定到 多个 端点。每个绑定都可能返回一个错误,因此我们将利用 ?
(尝试)运算符。
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 = 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 = 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 {
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 = Socket::new(Protocol::Push)?;
let mut endpoint = socket.connect("ipc:///tmp/pipeline.ipc")?;
socket.write(b"message in a bottle");
endpoint.shutdown();
Ok(())
}
贡献者
(按任意顺序)
- Daniel Fagnan (@TheHydroImpulse)
- Jason E. Aten (@glycerine)
- David C. Bishop (@dcbishop)
- Dennis Lawler (@evenodder)
- Zachary Tong (@polyfractal)
- Dan Burkert (@danburkert)
- Benoît Labaere (@blabaere)
- Kevin Butler (@Ryman)
- Andrew (@GGist)
- Chip Collier (@photex)
- Zeke Foppa (@bfops)
- Philippe Delrieu (@musitdev)
- Daniel Kozlowski (@dkhenry)
- Vinzent Steinberg (@vks)
- Paul Woolcock (@pwoolcoc)
- Gabriel Martinez (@mystal)
- wdv4758h (@wdv4758h)
- Alexander Morozov (@alexandermorozov)
- Jan S (@jan-schreib)
- Thayne McCombs (@tmccombs)
- Anders Bennehag (@PureW)
- Peter Parkanyi (@rsdy)
- Jacek (@forgerpl)
- Gal Schlezinger (@Schniz)
- Gilad Naaman (@Gilnaa)
许可证
MIT许可证(MIT)
- 版权所有(c)2013-2014 Jason E. Aten,博士 @glycerine
- 版权所有(c)2014 Daniel Fagnan @thehydroimpulse
- 版权所有(c)2015-2018 Benoît Labaere @blabaere
在此特此授予任何人免费获得本软件及其相关文档文件(以下简称“软件”)副本的权利,不受任何限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向软件提供副本的个人从事上述活动,但须遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是在合同、侵权或其他行为中产生的,是否与软件、使用或以其他方式使用软件有关。
依赖项
~0.4–280KB