Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将异步金字塔与aiozmq和WebSocket一起使用_Websocket_Zeromq_Pyramid_Python Asyncio - Fatal编程技术网

将异步金字塔与aiozmq和WebSocket一起使用

将异步金字塔与aiozmq和WebSocket一起使用,websocket,zeromq,pyramid,python-asyncio,Websocket,Zeromq,Pyramid,Python Asyncio,我正在尝试创建一个由两个进程组成的金字塔应用程序: “经典”同步金字塔应用程序,即CMS 另一个异步应用程序,也基于金字塔。但Gunicorn使用aiopyramid在不同的流程中运行此应用程序 WebSockets基础管理是正常的 现在,我需要实现一个ZeroMQ服务器,该服务器将用于在请求/应答模式下与CMS通信:在特定事件中,CMS将发送一条ZeroMQ消息,该消息将被检查,新消息将被发送到连接的WebSocket 我的问题实际上是ZeroMQ消息得到了正确处理,但WebSockets

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

  • “经典”同步金字塔应用程序,即CMS

  • 另一个异步应用程序,也基于金字塔。但Gunicorn使用aiopyramid在不同的流程中运行此应用程序

WebSockets基础管理是正常的

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

我的问题实际上是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”。 “用户”是连接的WebSocket列表;在WebSockets视图中使用相同的列表没有问题

实际上,会显示“Message sent…”消息,但不会发送WebSockets消息! 这可能是一个异步调用问题,但我还没有使用它们的习惯,我有点迷路了。 我试图将函数的somme声明为协同路由,但是ZeroMQ调用挂起,WebSockets消息也没有发送

任何帮助都将不胜感激

致以最良好的祝愿,
Thierry

我从未使用过您的堆栈,但您是否尝试过将打印语句移动到
for user in users
循环中?例如,您可以打印
user.id
。虽然有点不相关,但您应该使用日志记录,而不是打印。“打印”状态只是为了调试目的。在实际代码中,我使用日志记录。我还尝试在用户循环中移动打印;已打印邮件,但未发送websockets邮件..:-/我最终通过使用服务器到服务器Websockets而不是ZeroMQ团队实现了这一点……我从未使用过您的堆栈,但您是否尝试过将打印语句移动到
for user in users
循环中?例如,您可以打印
user.id
。虽然有点不相关,但您应该使用日志记录,而不是打印。“打印”状态只是为了调试目的。在实际代码中,我使用日志记录。我还尝试在用户循环中移动打印;已打印邮件,但未发送websockets邮件..:-/我最终通过使用服务器到服务器WebSocket而不是ZeroMQ团队实现了这一点。。。