ZeroMQ,异步阻塞套接字

Posted

技术标签:

【中文标题】ZeroMQ,异步阻塞套接字【英文标题】:ZeroMQ, async blocking sockets 【发布时间】:2019-05-29 06:49:58 【问题描述】:

我正在构建一个分布式系统,我希望双方异步发送和接收,并在高水位标记后阻塞。

PUSH/PULL 套接字效果很好,但我无法绑定 PUSH 套接字。这意味着如果客户端在防火墙后面,我不能有一个客户端-PUSH 到服务器-PULL 和一个服务器-PUSH 到客户端-PULL,因为服务器无法连接到客户端。

书中写了以下内容,但我找不到它的例子。 “REQ to DEALER:理论上你可以这样做,但如果你添加第二个 REQ,它会中断,因为 DEALER 无法向原始对等方发送回复。因此 REQ 套接字会混淆,和/或返回消息意味着给另一个客户。” http://zguide.zeromq.org/php:chapter3

我只需要一对一的连接,所以理论上这对我有用。

我的问题是,在不丢包的情况下,使用 ZeroMQ 获得异步发送和接收的最佳做法是什么?

【问题讨论】:

【参考方案1】:

大多数 ZeroMQ 套接字都可以绑定(侦听特定端口,充当服务器)和连接(充当客户端)。它通常与数据流无关。请参阅the guide 了解更多信息。

尝试在您的服务器上绑定 PUSH 套接字并从您的客户端 PULL 套接字连接。

【讨论】:

在 PULL 套接字上绑定没有问题。但是,AFAIK,我尝试绑定一个 PUSH,但失败了。 另一种选择是仅使用带有DEALER and ROUTER 套接字的单个连接。 ZMQ_ROUTER 是 ZMQ_HWM 选项动作:Drop.

以上是关于ZeroMQ,异步阻塞套接字的主要内容,如果未能解决你的问题,请参考以下文章

ZeroMQ使用学习记录(转)

什么可能导致 ZMQ 路由器套接字阻塞?

C++ winsock服务器中非阻塞模式与异步套接字的区别

阻塞和非阻塞同步和异步

unix套接字中的异步和非阻塞有啥区别?

zeromq.js - 等待连接