0

通过各种博客文章,我正在尝试使用 django 为 websockets 功能实现 django 通道

我正在使用 django 1.9.1

具有这些依赖项: asgi-redis==0.10.0 channels==0.12.0 daphne==0.11.1

设置.py

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "asgiref.inmemory.ChannelLayer",
        "ROUTING": "test.routing.channel_routing",
    },
}

路由.py

from channels.routing import route
from .consumers import websocket_receive

channel_routing = [
    route("websocket.receive", websocket_receive, path=r"^/chat/"),
]

消费者.py

def websocket_receive(message):
    text = message.content.get('text')
    if text:
        message.reply_channel.send({"text": "You said: {}".format(text)})

从浏览器控制台运行服务器后,我正在调用它

socket = new WebSocket("ws://" + window.location.host + "/chat/");
socket.onmessage = function(e) {
    alert(e.data);
}
socket.onopen = function() {
    socket.send("hello world");
}

在上面的调用中,在 runserver 日志中我可以看到对 websocket 的调用,如下所示:“[2016/11/15 19:35:39] WebSocket CONNECT /chat/ [127.0.0.1:55499]”,但我的消费者。 py 方法(websocket_receive) 永远不会被调用..

知道我哪里可能出错了吗?

4

1 回答 1

1

降低 Twisted 的版本解决了这个问题,默认安装的 Twisted 版本是 16.5,使用 16.2 解决了它。

于 2016-11-15T19:58:27.120 回答