Несколько подписчиков Zeromq

#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:

Сделайте привязку издателя() и подключение нескольких подписчиков(). Вы можете привязать/прослушивать одну и ту же конечную точку только один раз, но вы можете подключаться много раз.