我运行aiohttp
应用程序Gunicorn
落后于nginx
。 在我的应用程序的初始化模块中,我不运行使用web.run_app(app)
的应用程序,但只是创建一个将由Gunicorn
导入的实例,以便在每个工作人员Gunicorn
创建中运行该实例。 因此,Gunicorn
创建了一些工作进程,它们中的事件循环,然后在这些循环中创建应用程序的请求处理程序runs。在aiohttp应用程序中收听ZeroMQ
我的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?
我怎么能听aiohttp
应用程序内的ZeroMQ
代理将邮件转发到WebSockets
?
我在哪里可以将此代码在事件循环内的后台运行以及如何在aiohttp
应用程序的生命周期内正确运行和关闭它?
UPDATE
我已经在aiohttp的GitHub的库中创建一个issue描述该问题,并提出可能的解决方案。对于所描述的问题,我会非常感谢在这里或那里提出的意见。