另一种在ZeroMQ中进行PULL-PUSH同步的可靠方法

时间:2017-05-21 11:15:19

标签: c++ zeromq message-passing

  

如果你正在使用PUSH套接字,你会发现连接的第一个PULL套接字会抓住不公平的消息份额。消息的准确旋转仅在所有PULL套接字成功连接时发生,这可能需要几毫秒。作为PUSH / PULL的替代方案,对于较低的数据速率,请考虑使用ROUTER / DEALER和负载平衡模式。

因此,在PUSH / PULL中进行同步的一种方法是使用负载平衡模式。

对于下面这个特定情况,我想知道是否还有另一种方法可以进行同步:

Parallel Pipeling

我可以将worker中的PULL端点设置为阻塞,直到连接成功设置,然后通过工作人员的PULL端点发送特殊消息到“接收”。在“沉沦”之后接收#manage的特殊消息,' sink'发送带有REQ-REP的消息给呼吸机'通知所有工人准备好了。 '通气机'开始向工人分配工作。 它可靠吗?

图片来自here

1 个答案:

答案 0 :(得分:0)

是的,只要Sink知道在Workers告诉Ventilator开始发送消息之前等待多少Workers。问题是来自Sink的特殊消息是否在Ventilator连接之前启动时才会通过 - 但您可以通过让他们继续发送特殊消息直到他们开始来解决这个问题从Sink获取数据。如果你这样做,Workers当然会忽略它收到的任何重复。

当然,这与VentilatorWorkers有实时工作连接的情况并不完全相同,但这本身就可以发送特殊的无用信息Sink收到。当他们收到其中一个可以开始向find发送特殊消息的人时。