python - 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 是更广为人知的通用模式,其中多个订阅者订阅由发布者发布的消息/主题。虽然我不知道为什么这对我不起作用。
解决方案
使发布者 bind() 和多个订阅者 connect()。您只能绑定/收听同一个端点一次,但可以连接多次。
推荐阅读
- html - 在页脚中排列 div
- swift - 单页应用程序中的 SpriteKit 粒子发射器?
- common-lisp - 如何在 Common Lisp 的另一个函数中调用一个函数?
- javascript - 如何一键运行几个mailto链接?
- node.js - 只能创建一个 cardNumber 类型的元素
- c# - 如何找出 EF 更新中错误的确切原因?
- python - Python BeautifulSoup 找不到标签
- flutter - 忽略进一步输入的颤振延迟
- mongodb - MongoDB - 在应用程序启动期间定期更新集合
- javascript - 如何使用谷歌表格应用宏文件夹范围?