有什么方法可以使用 Django Channels 构建具有当前限制的交互式终端吗?

Is there any way to build an interactive terminal using Django Channels with it's current limitations?

Django Channels 似乎每次在 websocket 上发生任何事情时都没有持久状态。即使在同一个 websocket 连接中,您也无法在基于 class 的消费者每次调用 receive() 之间保留任何内容。如果不能序列化到channel_session,就不能存储。

我假设基于 class 的消费者将在网络套接字连接期间持续存在。

我要构建的是一个简单的终端仿真器,其中会在 websocket 连接时创建一个 shell 会话。读取的数据将作为输入传递给 shell,而 shell 的输出将传递出 websocket。

我找不到在调用 receive() 之间保留任何内容的方法。似乎他们把 HTTP 的所有坏处都带到了 websockets 上。每次调用 conenct()recieve()disconnect() 时,整个消费者 class 都会重新实例化。

所以我错过了一些明显的东西。我可以创建另一个线程并从组中读取它吗?

编辑:这个问题的答案可以在下面的评论中找到。你可以破解它。 Channels 3.0 不会在每次接收调用时实例化消费者。

新版频道没有这个限制。消费者在 websocket 请求期间保留在内存中。