Django Channels可以即时实例化新的Consumer,而不链接到Websocket或其他协议吗?

时间:2019-07-08 06:06:51

标签: django django-channels

我正在构建Django Channels Tutorial,试图在本教程的简单聊天应用程序中添加一个“聊天管理器”使用者。它可以充当简单的聊天机器人,例如,可能每十秒钟在聊天室中发送一条随机消息。 这个想法是,当建立一个新的聊天室时,将只创建一次该ChatManagerConsumer,并且在整个聊天室的整个生命周期中仅存在一个一个 ManagerConsumer,即使单个用户/ WebsocketConsumers往返于该聊天室也是如此

我不清楚该怎么做。

背景工作人员无法正常工作,因为您似乎无法以编程方式创建背景工作人员的多个实例;从命令行只能产生一个。相反,我希望每个聊天室都运行一个Consumer实例。

文档说“消费者是长期运行的”和“聊天机器人协议将为用户与机器人的整个对话保持一个范围开放”,但并未真正解释如何为这种假设的聊天机器人打开消费者协议。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

如果它是仅在用户发送消息时才响应的漫游器,则您不需要单独的后台工作程序,因为用户的消息应触发漫游器来响应。但是,如果您需要在聊天中定期编写消息而不被用户的消息触发,则可以按照此处所述的方法运行工作程序channel.readthedocs.io/en/latest/topics/worker.html或使用专用的cron工作程序像芹菜节拍一样。

不应以任何方式将后台运行的进程限制为机器人。当然,您可以决定为每个游戏创建一个线程,但这很浪费资源,经过几次聊天,您将有太多的线程(甚至决定是否运行的进程)正在运行,这会对您的性能产​​生负面影响应用。您可以拥有一类机器人,每次聊天时都会实例化这些机器人,但它们只能在一个后台工作程序上运行。机器人本身并不是消费者,所以我不知道您为什么觉得应该使用消费者来解决问题