使用async Pyramid与aiozmq和websockets

时间:2016-05-26 10:56:26

标签: websocket zeromq pyramid python-asyncio

我正在尝试创建一个由两个进程组成的Pyramid应用程序:

  • “经典”同步金字塔应用程序,它是一个CMS

  • 另一个异步应用程序,也基于Pyramid。但这个应用程序由Gunicorn使用aiopyramid在不同的过程中运行。

WebSockets基础管理没问题。

现在,我需要实现一个ZeroMQ服务器,用于在请求/回复模式下与CMS通信:在特定事件上,CMS将发送一条ZeroMQ消息,该消息将被检查,新消息将被发送到连接WebSockets。

我的问题实际上是正确处理了ZeroMQ消息,但从未发送过WebSockets消息!

这就是消息的处理方式:

    class MyHandler(object):
        def __init__(self, stream):
            self.stream = stream

        def __call__(self, message):
            self.stream.write((json.dumps({'status': "OK"}).encode(),))
            for user in users:
                user.ws.send(message)
            print("Message sent...")

    def init_zmq_handler():
        stream = yield from aiozmq.create_zmq_stream(zmq.REP,
                                                 bind='tcp://0.0.0.0:5580')
        stream.transport._protocol.msg_received = MyHandler(stream)

在金字塔应用程序启动过程中调用“init_zmq_handler”。 “users”是已连接WebSockets的列表;在WebSockets视图中使用相同的列表没有问题。

实际上,显示“Message sent ...”消息,但不发送WebSockets消息! 这可能是一个异步的呼叫问题但是我没有习惯使用它们而且我有点迷失。 我试图声明函数的somme作为协程,但随后ZeroMQ调用挂起,WebSockets消息也没有发送...

非常感谢任何帮助......

祝你好运, 亨利

0 个答案:

没有答案