我在后面运行aiohttp应用程序。在我的应用程序的初始化模块中,我不使用运行应用程序,而只是创建一个实例,该实例将被导入以在每个工作人员创建的过程中运行它。因此创建了一些工作进程,在其中创建事件循环,然后在这些循环中运行应用程序的请求处理程序。Gunicornnginxweb.run_app(app)GunicornGunicornGunicorn
我的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 存储库中创建了一个问题,描述了该问题并提出了可能的解决方案。我非常感谢您在这里或那里就所描述的问题提供意见。