【问题标题】:another reliable way to do PULL-PUSH sync in ZeroMQ在 ZeroMQ 中进行 PULL-PUSH 同步的另一种可靠方法
【发布时间】:2017-05-21 11:15:18
【问题描述】:

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

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

对于下面这个特定的情况,我想知道是否有另一种方法来做同步:

我可以将 worker 中的 PULL 端点设置为阻塞,直到连接成功建立,然后通过 worker 的 PULL 端点向“sink”发送一条特殊消息。在 'sink' 收到 #worker 的特殊消息后,'sink' 会向 'ventilator' 发送一条带有 REQ-REP 的消息,以通知所有工作人员准备就绪。 “呼吸机”开始将工作分配给工人。 靠谱吗?

图片来自here

【问题讨论】:

    标签: c++ zeromq message-passing


    【解决方案1】:

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

    当然,这与Workers 与Ventilator 建立实时、有效的连接并不完全相同,但这本身可能会发送Workers 接收的特殊无操作消息。当他们收到其中一个时,就可以开始向Sink 发送特殊消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 2020-05-20
      • 2013-12-14
      • 2013-07-22
      • 2021-12-23
      • 2020-06-11
      • 2017-01-22
      相关资源
      最近更新 更多