将异步金字塔与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在不同的流程中运行此应用程序
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团队实现了这一点。。。