ZeroMQ 经销商到经销商 - 工作分配

ZeroMQ Dealer to Dealer - work distribution

考虑以下设置。我 connect() 多个 DEALER 套接字(客户端)到另一个 DEALER,绑定到一个地址(服务器)。正是其中一个客户端在循环中调用 recv(),而其他客户端可能偶尔会向服务器发送一些内容。

服务器套接字是否会尝试将已发送的消息分发给那些没有收到任何消息的客户端?我无法在 ZeroMQ 指南和 zmq_socket 联机帮助页中找到经销商套接字如何处理工作分配。

我用的是ZMQ 4.1

我写了一个小测试程序,发现dealer socket不知道对方有没有接收。因此,它会尝试将传出消息分发给所有连接的对等方。

并非所有版本的 ZeroMQ 都以相同的方式工作

安全的方法是检查相应的版本API man-page以获取详细信息。并非所有项目都可以使用最新的 API,由于互操作性原因,当任何交易方根本没有任何可用的更新版本 API 绑定时。然后最老的统治人群。

ZeroMQ 2.1.11 API不允许DEALER/DEALER
ZeroMQ 4.2.0 API 确实

无论如何,API man-pages 始终是值得详细了解的来源:

4.2.0
ZMQ_DEALER
A socket of type ZMQ_DEALER is an advanced pattern used for extending request/reply sockets. Each message sent is round-robined among all connected peers, and each message received is fair-queued from all connected peers.

When a ZMQ_DEALER socket enters the mute state due to having reached the high water mark for all peers, or if there are no peers at all, then any zmq_send(3) operations on the socket shall block until the mute state ends or at least one peer becomes available for sending; messages are not discarded.

When a ZMQ_DEALER socket is connected to a ZMQ_REP socket each message sent must consist of an empty message part, the delimiter, followed by one or more body parts.

Summary of ZMQ_DEALER characteristics

Compatible peer sockets:      ZMQ_ROUTER, ZMQ_REP, ZMQ_DEALER
Direction:                    Bidirectional
Send/receive pattern:         Unrestricted
Outgoing routing strategy:    Round-robin
Incoming routing strategy:    Fair-queued
Action in mute state:         Block