2

我正在尝试通过文档实现 Django 频道。
所以就像我正在制作的文档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 连接正常工作并建立了连接,但该receive部分未处理且未在控制台中看到,因此不会引发来自 js 代码的警报。那么我做错了什么?

4

1 回答 1

6

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

于 2016-07-12T14:01:17.077 回答