python - ZeroMQ 和 Python 中的多个订阅过滤器

标签 python sockets zeromq

我想在 Python 中使用 ZeroMQ 订阅多个过滤器,使用一个套接字。

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

但这不起作用。只考虑第一个。然而,我在 zeromq site 上读到了这篇文章:

Multiple filters may be attached to a single ZMQ_SUB socket, in which case a message shall be accepted if it matches at least one filter.

我正在使用 zmq 2.2.0.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

所以两个订阅都可以工作。你的确切代码是什么?因为也许这是另一个问题。

关于python - ZeroMQ 和 Python 中的多个订阅过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13904626/

相关文章:

python - 如何处理并发客户端请求?

python - 在 python 中导入 fastparquet 时 snappy 出错

python - django url 标签,不是有效的 View 函数或模式名称

java - java服务器和matlab客户端之间的通信

c# - 0MQ windows GUI 最佳实践

java - JeroMQ中ZMQueue类有什么用

python - 附加到 DataFrame 会转换数据类型

Pythonic 方式链接 python 生成器函数以形成管道

c++ - 套接字,理解IN_ADDR中的S_un

ruby - 在 Ruby 中读取套接字时理解 IO.select