Там запускается несколько worker'ов. И при старте идет подключение к вебсокету. При получении сообщения обновляется бд и отправляется уведомление. Но так как воркеров несколько, уведомление отправляется несколько раз (почти в одно и то же время приходит).
Как можно сделать обработку сообщений от вебсокета только в одном воркере? Или проще просто отдельный скрипт написать и запустить в фоне?
Ну вообще клиент должен держать Коннект с одним сокетом и получать оттуда уведомления. Если он держит несколько коннектов, то сервер работает правильно ц те.я
Я все таки ещё раз спрошу: как связано число воркеров и то, что уведомление приходит несколько раз?
Каждый воркер при старте подключается к вебсокету, а при новом сообщении оно приходит всем воркерам примерно в одно время, и каждый из них отсылает уведомление дальше, т.к. бд ещё не обновлена (на стороне вебсокет сервера это asyncio.gather)
Ну допустим. Пока проблемы не вижу. Клиент все равно держит Коннект с одним воркером же
Как с одним?) Возможно я не так сказал Каждый воркер gunicorn подключается к одному и тому же вебсокету другого приложения, поэтому при новом сообщении оно приходит всем воркерам gunicorn одновременно
Обсуждают сегодня