Как сделать запрос в Gunicorn и ответить с помощью Daphne? Использование каналов Django, Nginx, Gunicorn, Daphne

Я столкнулся со странной проблемой при развертывании приложения Django с Nginx, Daphne и Gunicorn.

На данный момент я успешно развернул свое приложение Django. Мои HTTP запросы обрабатываются Gunicorn, а WSS запросы обрабатываются Daphne, что и должно произойти.

Рассмотрим сценарий, в котором я отправляю HTTP-запрос в Gunicorn, а Django нужно отправить сообщение обратно по каналам. Как мне это сделать?

Например, если я добавляю пост через HTTP POST запрос, и хочу отправить уведомление через каналы всем открытым каналам (список которых у меня есть), как мне заставить Django отправить сообщение канала через Daphne, даже если запрос был HTTP, полученный через Gunicorn?

Поток запросов, который мне нужен, следующий:

Client > HTTP > NGINX > GUNICORN > DJANGO > Do some processing > Send notification to all open channels via WSS > Send HTTP RESPONSE OK STATUS=200 to client

Я использовал это руководство для развертывания

https://github.com/mitchtabian/HOWTO-django-channels-daphne/blob/master/README.md

Все работает нормально, за исключением того, что я не получаю WSS сообщения на клиентском WebSocket слушателе, когда я отправляю HTTP запрос на Gunicorn, но когда я отправляю HTTP запрос на Daphne, я получаю WSS ответ успешно

Вам необходимо настроить Уровень канала :

Канальные уровни позволяют вам общаться между различными экземплярами приложения.

channels_redis - хороший вариант, для передачи сообщения с сервера на другой.

Поток запросов будет таким:

Client request -> NGINX -> Gunicorn -> Django Application -> Send notification  -> Redis -> Websocket Consumer -> Send response
Вернуться на верх