相关疑难解决方法(0)

ZMQ:多个订阅者的XPUB套接字上没有订阅消息(Last Value Caching模式)

我实现了ZMQ的最后值缓存(LVC)示例(http://zguide.zeromq.org/php:chapter5#Last-Value-Caching),但无法让第二个订阅者在后端注册.

订户首次登机时,event[0] == b'\x01'条件得到满足并且缓存的值被发送,但第二个订户(同一主题)甚至没有注册(if backend in events:永远不会).其他一切都很好.数据从发布者传递给订阅者(全部).

这可能是什么原因?后端的连接方式是否正确?这种模式是否只适用于第一个订户?

更新

当我将第二个订阅者订阅到另一个主题时,我得到了正确的行为(即\x01订阅时).这似乎对第一个用户起作用.是ZeroMQ中的错误吗?

更新2

下面是一个最小的工作的例子,表明LVC模式工作(至少不是在这里实施的方式).

# subscriber.py
import zmq

def main():
    ctx = zmq.Context.instance()
    sub = ctx.socket(zmq.SUB)
    sub.connect("tcp://127.0.0.1:5558")

    # Subscribe to every single topic from publisher
    print 'subscribing (sub side)'
    sub.setsockopt(zmq.SUBSCRIBE, b"my-topic")

    poller = zmq.Poller()
    poller.register(sub, zmq.POLLIN)
    while True:
        try:
            events = dict(poller.poll(1000))
        except KeyboardInterrupt:
            print("interrupted")
            break

        # Any new topic data we cache and then forward
        if sub in events:
            msg = …
Run Code Online (Sandbox Code Playgroud)

python sockets proxy publish-subscribe zeromq

7
推荐指数
1
解决办法
1219
查看次数

标签 统计

proxy ×1

publish-subscribe ×1

python ×1

sockets ×1

zeromq ×1