Как сделать запрос в 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