在python中使用google协议缓冲区实现Zmq

时间:2014-04-02 16:31:24

标签: python protocol-buffers pyzmq

我正在尝试在python中实现以下场景。需要帮助才能得到类似实现的任何好例子。

---------    
Module 1
---------    
Module 2
---------        
Module 3
---------    

我想开发一个带有Google协议缓冲区的Python框架,以便消息可以通过module1传递到module2到module3,反之亦然。

我创建了协议消息文件。我在module2中创建了一个线程,我在其中创建了zmq套接字。

现在我想在python中添加类似于zloop的东西,在那里我可以监听来自模块1或3的消息,然后传递它。

任何指针都将不胜感激。

1 个答案:

答案 0 :(得分:0)

pyzmq不是像czmq那样实现自己的事件循环,而是在zmq.eventloop.ioloop中集成tornado 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方法,它允许您注册一个回调,以便在消息到达套接字时运行。

the pyzmq eventloop docs