3

我目前正在尝试使用 0MQ 进行代理。我想订阅一个不在 0MQ 下运行的发布者。我的意思是我有一个发送 XML 文件的远程发布者的地址和端口,我想获取这些文件。不幸的是,我没有收到来自发布者的任何消息,而它正在发送。

我正在做的是(在 Python 中):

context    = zmq.Context(1)
subscriber = context.socket(zmq.SUB)
subscriber.connect(address)
subscriber.setsockopt(zmq.SUBSCRIBE, '') # I want to subscribe any topics

同时,我有一个发布者发送接收到的消息(如果发生的话):

publisher = context.socket (zmq.PUB)
publisher.bind(publishing_address)

最后,

while True:
    data = subscriber.recv()
    print data
    publisher.send(data)

我测试了我的代理,当我将它连接到 0MQ 发布者时它可以工作,但是当我连接到不工作的非 OMQ 发布者时。

4

1 回答 1

4

恐怕这无法实现,因为ØMQ 不是中立的载体

ØMQ 新手常问的一个问题(我自己也问过这个问题)是“如何在 ØMQ 中编写 XYZ 服务器?” 例如,“如何在 ØMQ 中编写 HTTP 服务器?” 这意味着如果我们使用普通套接字来承载 HTTP 请求和响应,我们应该能够使用 ØMQ 套接字来做同样的事情,只是更快更好。

过去的答案是“这不是它的工作方式”。ØMQ 不是一个中立的载体,它对它使用的传输协议强加了一个框架。这种成帧与倾向于使用自己的成帧的现有协议不兼容。例如,比较通过 TCP/IP 的 HTTP 请求和 ØMQ 请求。

换一种说法:ØMQ 只能与 ØMQ 对话

于 2013-04-26T11:01:30.763 回答