#zeromq #future

futures-zmq

为任何futures执行器提供ZeroMQ的Futures抽象

6个版本 (破坏性更新)

0.5.0 2019年6月18日
0.4.0 2018年12月23日
0.3.1 2018年11月18日
0.2.0 2018年11月14日
0.1.0 2018年11月12日

#1179 in 异步


2 crate中使用了

GPL-3.0 许可证

105KB
2K SLoC

Futures ZMQ

文档 crates.io

此crate包含围绕ZeroMQ概念的Futures包装器。它与tokio-zmq共享外部API,但与tokio-zmq不同,futures-zmq是OS和Executor无关的。这以性能为代价,因为futures-zmq依赖于启动单独的线程来管理ZeroMQ套接字,而tokio-zmq可以通过让mio管理套接字来避免这个问题。

当前支持的套接字

  • REP
  • REQ
  • PUB
  • SUB
  • PUSH
  • PULL
  • XPUB
  • XSUB
  • PAIR
  • DEALER
  • ROUTER

查看示例文件夹以获取使用示例。

注意:这些示例使用Tokio,但此crate不需要tokio的运行时。任何futures执行器都应该可以工作。

入门

futures = "0.1.25"
futures-zmq = "0.5"
tokio = "0.1"
zmq = "0.9.1"

在你的应用程序中

use std::sync::Arc;

use futures::{Future, Stream};
use futures_zmq::{prelude::*, Rep};

fn main() {
    let ctx = Arc::new(zmq::Context::new());
    let rep_fut = Rep::builder(ctx).bind("tcp://*:5560").build();

    let runner = rep_fut.and_then(|rep| {
        let (sink, stream) = rep.sink_stream(25).split();

        stream
            .map(|multipart| {
                // handle the Multipart
                // This example simply echos the incoming data back to the client.
                multipart
            })
            .forward(sink)
    });

    tokio::run(runner.map(|_| ()).or_else(|e| {
        println!("Error: {:?}", e);
        Ok(())
    }));
}

运行示例

req.rsrep.rs 示例旨在一起使用。 rep 示例使用REP套接字启动服务器,而 req 示例使用REQ套接字查询该服务器。

zpub.rssub.rs 示例应一起使用。zpub 生成值,这些值由 sub 消费。

push.rspull_push.rspull.rs 文件应一起使用。push 生成值,这些值由 pull_push 传递到 pull,它消费这些值并向自身和 pull_push 发送停止信号。

sync_pubsub.rsdealer_router.rsload_balancing_broker 都是自包含的,并启动多个线程。

贡献

请随意为任何发现的问题提交问题。请注意,任何贡献的代码都将根据GPLv3许可。

许可证

版权所有 © 2018 Riley Trautman

Futures ZMQ 是免费软件:您可以在自由软件基金会发布的GNU通用公共许可证的条款下重新分发和/或修改它,许可证版本为3,或(根据您的选择)许可证的任何较新版本。

未来ZMQ以供分发,希望它对您有所帮助,但没有任何保证;甚至没有关于商销或特定用途适用性的暗示性保证。有关更多详细信息,请参阅GNU通用公共许可证。此文件是未来ZMQ的一部分。

您应该已经收到了与未来ZMQ一起的GNU通用公共许可证副本。如果没有,请参阅http://www.gnu.org/licenses/

依赖项

~2.5MB
~56K SLoC