Каналы Django, создание нового Потребителя на лету, не связанного с Websocket или другим протоколом? - PullRequest
1 голос
/ 08 июля 2019

Я строю учебник по Django Channels , пытаясь добавить потребителя "Менеджер чата" в простое приложение чата учебника. Он будет функционировать как простой чат-робот, например, отправлять случайное сообщение в чате через каждые десять секунд, например. Идея состоит в том, что этот ChatManagerConsumer будет создан один раз, когда будет создана новая комната чата, и существует только один ManagerConsumer для срока службы всего чата, даже когда отдельные пользователи / WebsocketConsumers приходят и уходят из комнаты.

Я не совсем понимаю, как это сделать.

Фоновые работники не будут работать, так как похоже, что вы не можете программно создать несколько экземпляров фонового работника; только один может быть вызван из командной строки. Вместо этого я хотел бы иметь один экземпляр Consumer для каждой комнаты чата.

В документации сказано, что "потребители работают долго" и "протокол чат-бота оставит одну область открытой для всего разговора пользователя с ботом", но на самом деле не объясняется, как открыть потребителя для этого гипотетического чат-бота. протокол.

Любая помощь будет оценена!

1 Ответ

1 голос
/ 10 июля 2019

Если это бот, который отвечает только тогда, когда пользователь отправляет сообщение, то вам не нужен отдельный фоновый работник, поскольку сообщение пользователя должно сработать, чтобы бот ответил.Однако, если вам нужно периодически писать сообщение в чате, не вызывая сообщения пользователя, вы можете запустить работника, как описано здесь channel.readthedocs.io/en/latest/topics/worker.html, или использовать выделенного работника cron.как сельдерей.

Процесс, работающий в фоновом режиме, никоим образом не должен ограничиваться ботом.Конечно, вы можете решить создать поток для каждой игры, но это пустая трата ресурсов, и после нескольких чатов у вас будет слишком много запущенных потоков (или даже процессов, если вы решите), что отрицательно скажется на производительности вашей игры.приложение.У вас может быть класс ботов, который создается каждый раз для чата, но запускается на одном фоновом работнике.Бот сам по себе не является потребителем, поэтому я не знаю, почему, по вашему мнению, вам следует решить проблему с помощью потребителя

...