在Python中实现Zmq与Google协议缓冲区
我正在尝试在Python中实现下面的场景。希望能找到一些类似实现的好例子。
---------
Module 1
---------
Module 2
---------
Module 3
---------
我想开发一个使用Google协议缓冲区的Python框架,这样消息就可以在模块1、模块2和模块3之间传递,反之亦然。
我已经创建了协议消息文件。在模块2中,我创建了一个线程,并在其中创建了zmq套接字。
现在我想在Python中添加类似于zloop的东西,这样我就可以监听来自模块1或模块3的消息,然后进行传递。
任何建议都会很感激。
1 个回答
0
pyzmq没有像czmq那样自己实现一个事件循环,而是集成了tornado的事件循环,这个功能在zmq.eventloop.ioloop
里。
下面是一个简单的例子,它会接收任何在incoming
上的消息,并记录下来,然后把相同的消息不做修改地发送到outgoing
:
import zmq
from zmq.eventloop import ioloop, zmqstream
loop = ioloop.IOLoop.instance()
ctx = zmq.Context()
incoming = ctx.socket(zmq.PULL)
incoming.bind('tcp://127.0.0.1:5555')
outgoing = ctx.socket(zmq.PUSH)
outgoing.bind('tcp://127.0.0.1:5556')
sincoming = zmqstream.ZMQStream(incoming, loop)
soutgoing = zmqstream.ZMQStream(outgoing, loop)
def relay(msg):
print("relaying %s" % "|".join('%r' % part for part in msg))
soutgoing.send_multipart(msg)
sincoming.on_recv(relay)
loop.start()
这里的关键在于stream.on_recv
这个方法,它允许你注册一个回调函数,当有消息到达这个套接字时就会运行这个函数。