Решает ли Django Channels проблему с блокирующими запросами?

Django Channels позволяет джанге работать с сокетами. Таким образом не возникает необходимости постоянно спрашивать сервер - не появилось ли для клиента новой информации.
Но как быть с асинхронной обработкой запросов? Допустим 10 клиентов подключены сокетами к серверу. Статику отдаёт nginx. Запросы выдать динамику отправляет в channel layer сперва?
Ну а что дальше? динамический сервер генерирует по 10 сообщений для каждого клиента. Он ведь всё равно будет делать это последовательно? Или я что-то не так понял
Можно ли на джанге реализовать асинхронную обработку в целях повышения скорости обработки
Если нет, какую альтернативу бы вы посоветовали?
  • Вопрос задан
  • 1160 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Десять соединений от клиентов подключены к интерфейсному процессу - серверу Daphne. Запросы, приходящие через эти соединения, передаются в очередь, например Redis. А оттуда уходят воркерам, которые последовательно запускают синхронные обработчики. Если воркеров у вас 5 и одновременно пришло 10 запросов к вьюхе, которой на ответ нужна секунда, то 5 клиентов получат ответ через секунду, а ещё 5 через две. Django Channels - это почти как Django + Celery. Основная разница только в возможности удерживать множество открытых соединений.

Если нужна полноценная асинхронность, то лучше посмотреть в сторону aiohttp.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы