首页 > 解决方案 > Zeromq 多个订阅者

问题描述

我正在尝试将视频流从一个程序发送到任意数量的客户端(例如 0-10 个客户端)

我可以通过一个发布者和一个订阅者轻松地做到这一点,但是如果我启动另一个客户端应用程序,它不会开始接收任何数据,直到我关闭第一个。

我的代码如下所示:
服务器

import zmq
import imageio
import simplejpeg


context = zmq.Context()
publisher = context.socket(zmq.PUB)
publisher.connect("ipc:///tmp/v4l")



gif = imageio.get_reader('video.mp4')

while True:
    for frame in gif:
        frame = simplejpeg.encode_jpeg(frame)
        publisher.send(frame)

客户

import zmq
context = zmq.Context()
subscriber = context.socket(zmq.SUB)
subscriber.bind("ipc:///tmp/v4l")
subscriber.setsockopt(zmq.SUBSCRIBE, b'')
i = 0
while True:
    data = subscriber.recv()
    print(i)
    i = i+1

在文档(https://learning-0mq-with-pyzmq.readthedocs.io/en/latest/pyzmq/patterns/pubsub.html)中声明

场景 #2 是更广为人知的通用模式,其中多个订阅者订阅由发布者发布的消息/主题。虽然我不知道为什么这对我不起作用。

标签: pythonzeromq

解决方案


使发布者 bind() 和多个订阅者 connect()。您只能绑定/收听同一个端点一次,但可以连接多次。


推荐阅读