19

1 つのソケットを使用して、Python の ZeroMQ で複数のフィルターにサブスクライブしたいと思います。

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

しかし、これはうまくいきません。最初のものだけが考慮されます。しかし、私はzeromq サイトでこれを読みました:

複数のフィルターを 1 つのZMQ_SUBソケットにアタッチすることができます。この場合、少なくとも 1 つのフィルターに一致するメッセージは受け入れられます。

zmq 2.2.0.1 を使用しています。それで、私はそれをどのように行うのだろうか。何か案は?

4

1 に答える 1

33

これは機能します:

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

したがって、両方のサブスクリプションが機能します。あなたの正確なコードは何ですか?多分それは別の問題だからです。

于 2012-12-16T21:03:09.880 に答える