【发布时间】:2020-06-13 07:47:39
【问题描述】:
服务器循环遍历对象列表,这些对象上的数据实时变化。服务器每毫秒发布这些对象的所有新数据。
即['Carrot', 'Banana', 'Mango', 'Eggplant']
客户端可以通过名称订阅特定对象。 self.sub_socket.setsockopt_string(zmq.SUBSCRIBE, 'Carrot')
在线程上,客户端也会实时轮询这些数据
while True:
sockets = dict(self.poller.poll(poll_timeout))
if self.sub_socket in sockets and sockets[self.sub_socket] == zmq.POLLIN:
msg = self.sub_socket.recv_string(zmq.DONTWAIT)
// do something with the msg...
问题是当我订阅多个对象时,比如说Carrot, Eggplant & Banana。我只是
收到来自Carrot 的更改,有时是Banana,在Eggplant 上很少见。我认为这是因为从服务器的循环顺序来看,比如当客户端轮询时,接收 Carrot,处理数据,然后再次轮询,但服务器已经完成了通过列表发布并再次发布 Carrot 然后客户端因此,民意调查只收到了胡萝卜。
所以我想为每个订阅创建单独的套接字?这是一个解决方案吗?我是 ZMQ 的新手,希望能得到一些帮助,谢谢!
【问题讨论】:
标签: python sockets asynchronous zeromq