#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 является более известным, общим шаблоном, когда несколько подписчиков подписываются на сообщения/темы, публикуемые издателем. хотя я не могу понять, почему это не работает для меня.
Ответ №1:
Сделайте привязку издателя() и подключение нескольких подписчиков(). Вы можете привязать/прослушивать одну и ту же конечную точку только один раз, но вы можете подключаться много раз.