我在后面运行aiohttp
应用程序。在我的应用程序的初始化模块中,我不使用运行应用程序,而只是创建一个实例,该实例将被导入以在每个工作人员创建的过程中运行它。因此创建了一些工作进程,在其中创建事件循环,然后在这些循环中运行应用程序的请求处理程序。Gunicorn
nginx
web.run_app(app)
Gunicorn
Gunicorn
Gunicorn
我的aiohttp
应用程序有一组已连接的WebSockets
(移动应用程序客户端),我想在由Gunicorn
. 我想通知所有 WebSockets
连接到所有应用程序进程的人。因此,我使用创建某种上游代理,ZeroMQ
并且我想使用zmq.SUB
每个应用程序进程中的套接字订阅它。
...所以基本上我想在每个应用程序工作人员中实现这样的目标:
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect('tcp://localhost:5555')
while True:
event = socket.recv()
for ws in app['websockets']:
ws.send_bytes(event)
# break before app shutdown. How?
如何ZeroMQ
在应用程序中侦听代理aiohttp
以将消息转发到WebSockets
?
我可以在哪里将此代码放在事件循环中的后台运行以及如何在aiohttp
应用程序的生命周期中正确运行和关闭它?
更新
我已经在 aiohttp 的 GitHub 存储库中创建了一个问题,描述了该问题并提出了可能的解决方案。我非常感谢您在这里或那里就所描述的问题提供意见。