@NyxDeveloper

Как в контексте синхронной джанги заставить channels отправлять сообщения в реальном времени?

Всем привет!
Делаю одно web-приложение, в котором один процесс приходится очень долго ждать. Решил, что можно повесить на прогресс channels веб-сокет, но дело в том, что все сообщения в сокет приходят только после возвращения ответа с сервера, что делает такой индикатор прогресса бесполезным.
Можно ли как-нибудь заставить метод channels_layer.send/group_send отправить сообщениев сокет до получения ответа от сервера?
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
@rodion4dev
Привет

Ответ на основной вопрос - да, можно. Но придётся понять для себя как работает эта связка Django + Channels, чтобы данные по каналу с сервера отправлялись асинхронно.

Если вкратце: подключить channels_redis, в своём Consumer'е реализовать метод-обработчик, который будет получать извне данные и отправлять их в действующий websocket канал, и реализовать постоянно-работающую службу (в зависимости от того как вы отправляемые данные подготавливаете; например, celery worker), которая, подготовив данные, отправит их через group_send(), который, в свою очередь, положит данные в Redis, а Consumer, с обратной стороны, вытащит их и передаст в тот самый метод-обработчик.

Сперва голова кругом от такой логики, но всё очень продуманно и нужно только время на понимание процессов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы