【问题标题】:Data obtaining check PUB/SUB pattern数据获取检查 PUB/SUB 模式
【发布时间】:2013-04-28 16:56:02
【问题描述】:

有一个服务器,它收集一些数据,然后将其发送给客户端。我需要确保客户端获得了服务器发送的数据。我认为这里的 PUB/SUB 模式是最好的选择,但我不明白如何检查客户端是否获取数据?我听说过一些可靠的 PUB/SUB,但没有真正的例子。

有什么想法、建议、例子和帮助吗?

简单的发布者:

import zmq

context = zmq.Context()

server_socket = context.socket(zmq.PUB)
server_socket.bind('tcp://*:5559')

while True:
    server_socket.send('message')

简单订阅者:

import zmq

context = zmq.Context()

client_socket = context.socket(zmq.SUB)
client_socket.setsockopt(zmq.SUBSCRIBE, '')
client_socket.connect('tcp://localhost:5559')

while True:
    print client_socket.recv()

在此示例中,我需要确保订阅者收到“消息”。

【问题讨论】:

  • 我可能会在这里显示我对网络的无知,但 TCP 本质上不是一个可靠的通信协议,订阅者不会收到消息的唯一方法是如果他们没有连接?
  • 这是真的,但我需要检查是否有东西崩溃了,在这种情况下我需要重新发送消息。 F.e.客户端崩溃 20 秒,但服务器仍在发送消息,当客户端唤醒时,会丢失一堆消息。
  • 你能不能只打开第二个端口并听它确认?

标签: python zeromq publish-subscribe pyzmq


【解决方案1】:

在其一般形式中,pubsub 不适合您的用例。 pubsub 的基本原则之一是发布者和订阅者解耦。 IE。发布者不应该知道它的订阅者,也不应该受到他们的影响。可能有任意数量的订阅者,包括没有。

您似乎需要一个订阅者,这打破了这一点。

【讨论】:

    【解决方案2】:

    ZMQ 指南讨论了如何始终丢弃来自 PUB 套接字的前几条消息,以及如果您想要您所谈论的可靠性,您需要 SUB 端发送回它收到每条消息的确认.

    您可能需要考虑改用 PUSH/PULL 连接。将 PUB 替换为 PUSH,将 SUB 替换为 PULL。也许绑定PUSH端。见:ZMQ PUSH/PULL

    【讨论】:

      猜你喜欢
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多