在zeromq/python中使用pyobj子函数时设置主题

3 投票
1 回答
1017 浏览
提问于 2025-04-18 08:38

我最近在研究zeromq,发现有两个函数:socket.send_pyobj()和socket.recv_pyobj()。

我想问的是,如果使用这两个函数,怎么设置PUB/SUB的主题呢?我看到的例子中,使用普通的发送时,通常是两个字符串,中间有个空格,第一个字符串被当作主题。

topic = 'test'
msg = 'hello'
socket.send("%s %s" % (topic,msg))

有没有什么方法可以做到?或者我是不是应该使用不同的端口来创建不同的主题呢?

1 个回答

9

没事,我已经搞明白怎么做了。如果我想把主题和消息当作一个整体来看,还想过滤对象的话,我应该使用send_multipart。

这是给发布者的代码。

   self.socket.send_multipart([b'status',pickle.dumps(msg2)])

这是给接收者的代码。

    socket.setsockopt(zmq.SUBSCRIBE, 'status')
    [topic,msg] = socket.recv_multipart()
    msg2 = pickle.loads(msg)
    print msg2['game']

我不知道为什么,但如果你使用他们的例子,http://zguide.zeromq.org/py:psenvsub,它显示我应该在socketopt上做b'status',但如果我那样做的话,它并没有过滤。

撰写回答