ZeroMQ и несколько фильтров подписки в Python

Я хочу подписаться на несколько фильтров с помощью ZeroMQ в Python, используя один сокет.

sock.setsockopt(zmq.SUBSCRIBE, 'first.filter')
sock.setsockopt(zmq.SUBSCRIBE, 'second.filter')

Но это не работает. Учитывается только первая.

Однако я прочитал это на сайте zeromq: "Несколько фильтров могут быть присоединены к одному сокету ZMQ_SUB, и в этом случае сообщение должно быть принято, если оно совпадает хотя бы с один фильтр."

Я использую zmq 2.2.0.1

Так интересно, как это сделать., любые идеи?

Ответ 1

Это работает:

import time
import zmq

ctx = zmq.Context()
pub = ctx.socket(zmq.PUB)
sub = ctx.socket(zmq.SUB)

url = "tcp://127.0.0.1:5555"
pub.bind(url)
sub.connect(url)

# subscribe to 'a' and 'b'
sub.setsockopt(zmq.SUBSCRIBE, b'a')
sub.setsockopt(zmq.SUBSCRIBE, b'b')

time.sleep(1)

for word in [ 'alpha', 'beta', 'gamma', 'apple', 'carrot', 'bagel']:
    pub.send(word)

time.sleep(1)

for i in range(4):
    print sub.recv(zmq.NOBLOCK)

дает результат:

alpha
beta
apple
bagel

Итак, обе подписки работают. Какой ваш точный код? Потому что, может быть, это еще одна проблема.