python - Django channel websocket.receive 未处理

标签 python django websocket django-channels

我正在尝试通过文档实现 Django channel 。
所以就像我制作的文档一样 consumers.py

def ws_message(message):
    message.reply_channel.send({
        "text": message.content['text'],
})

routing.py作为

from channels.routing import route
from my_proj.consumers import ws_message

channel_routing = [
    route("websocket.receive", ws_message),
]

在我的 settings 文件中,我添加了 channel_layers

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "asgi_redis.RedisChannelLayer",
        "CONFIG": {
            "hosts": [("localhost", 6379)],
        },
        "ROUTING": "my_proj.routing.channel_routing",
    },
}

所以当我运行服务器并在 chrome 控制台中发送以下内容时

socket = new WebSocket("ws://" + 192.168.4.177:8000");
socket.onmessage = function(e) {
    alert(e.data);
}
socket.onopen = function() {
    socket.send("something");
}

我可以在 manage.py 控制台中看到 Websocket connect 工作并且连接已建立,但是 receive 部分没有被处理并且在控制台中没有看到,所以没有引发来自 js 代码的警报。那我做错了什么?

最佳答案

问题出在 Twisted 的版本上。到目前为止,它的最新版本是 16.3.0,但 channel 需要 16.2.0 版本。因此,对于 16.2.0 版本的 Twisted,它可以正常工作。

关于python - Django channel websocket.receive 未处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38322197/

相关文章:

javascript - 在 ExpressJS 中将 socket.io 实现为子模块的最佳方式是什么?

swift - Swift Stomp客户端与Spring兼容

python - 在多列上使用 Pandas df.where 会产生意外的 NaN 值

python - 尝试将对象转换为 DateTime,出现 TypeError

Python:ulimit 和不错的 subprocess.call/subprocess.Popen?

django - 查看我的 Django 模型 - 需要很多建议

python - 从模型查询中获取字典

python - 如何在 Python 中将纪元时间戳舍入到最接近的分钟?

python - 如何使 django-registration 使用我自定义的 UserCreationForm 和 UserChangeForm?

python - 如何在 Python 中异步接收来自多个 WebSocket 的数据?