ZeroMQ指南在Getting an Out-of-Band Snapshot部分中描述了
客户端首先订阅更新,然后发出状态请求。这保证了状态将比它最早的更新更新。
如何使订阅首先保证客户端将收到比快照状态更新的所有更新?例如
因此,客户端会错过第4步中发生的状态更改。这种情况是否可能?
答案 0 :(得分:1)
请允许我更充分地描述这个过程:
SUB
到服务器PUB
)DEALER
到服务器ROUTER
)的当前状态 - ( 重要 em> :假设此请求到达服务器并开始构建快照需要更长的时间,而不是SUB
套接字完成连接和订阅更新所需的时间 - 这通常是合理的假设,但请注意)SUB
套接字中排队的状态为和的新更新。(A)非常正确,因此我们将重点关注<强>(B)即可。)SUB
套接字中的消息。如果有任何我们检查它们与我们现在的历史。如果我们已经有了这个更新(来自州),我们将其丢弃。如果我们不这样做,这是一条新消息,我们会处理它。 ...即使在示例代码中,SUB
套接字在收到状态之后才开始发送recv()
消息,它仍然从发布者那里获取它们并将它们排队直到它是准备好处理它们,因此没有错过更新的情况,而是计划和处理消息重复的相反情况。