【发布时间】:2017-01-08 04:19:26
【问题描述】:
所以我是 ZeroMQ 的新手,我正在尝试使用 ZeroMQ 发送字节消息,使用 PUB / SUB 设置。
编程语言的选择对于这个问题并不重要,因为我使用 ZeroMQ 在多种语言之间进行通信。
这是我在 python 中的服务器代码:
import zmq
import time
port = "5556"
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:%s" % port)
while True:
socket.send(b'\x84\xa5Title\xa2hi\xa1y\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xa1x\xcb@\x1c\x00\x00\x00\x00\x00\x00\xa4Data\x08')
time.sleep(1)
这是我在 python 中的客户端代码:
import zmq
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5556")
total_value = 0
for update_nbr in range (5):
string = socket.recv()
print (string)
我的客户只是通过 string = socket.recv() 阻止。
我已经做了一些研究,所以显然,如果我要使用PUB / SUB 设置发送字符串,我需要设置一些“主题过滤器”以使其工作。但是如果我要发送一些字节消息,我不确定该怎么做。
【问题讨论】:
-
我自己解决了这个问题。需要使用 Pub-Sub-Message-Envelopes。 zguide.zeromq.org/page%3aall#Pub-Sub-Message-Envelopes
-
好吧,虽然使用(人工)消息数据拆分为双帧“信封”是主要问题的一个可能的侧面步骤并且仍然可能,但它有几个非零附加成本 - a) 消息不再是本地 PUB/SUB 消息(一些编程语言绑定碰巧在静默中完成了这一步骤,因此接收 SUB 不需要知道处理到达消息(推广为普通的 PUB/SUB 之一)作为多帧组合和跨平台解决方案造成破坏)+ b)重构。字节正确订阅是零成本的干净解决方案。
标签: zeromq distributed-computing pyzmq low-latency