0

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

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

我正在尝试构建的是一个简单的终端模拟器,当 websocket 连接时将创建一个 shell 会话。读取的数据将作为输入传递给 shell,而 shell 的输出将传递到 websocket。

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

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

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

4

1 回答 1

0

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

于 2019-07-07T03:58:56.033 回答