Я запускаю приложение 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 с описанием проблемы и предложением возможного решения. . Я был бы очень признателен за вклад здесь или там по описанной проблеме.