django 频道集成问题,websocket.receive 不听

Posted

技术标签:

【中文标题】django 频道集成问题,websocket.receive 不听【英文标题】:django channels integration issue, websocket.receive not listening 【发布时间】:2016-11-15 19:47:12 【问题描述】:

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

我正在使用 django 1.9.1

使用这些依赖项: asgi-redis==0.10.0 频道==0.12.0 达芙妮==0.11.1

settings.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/"),
]

consumers.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]”,但是我的 consumer.py 方法(websocket_receive)永远不会被调用..

知道我哪里出错了吗??

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于django 频道集成问题,websocket.receive 不听的主要内容,如果未能解决你的问题,请参考以下文章

Django 频道:消息在一个频道中重复

Django - Celery Worker - 频道

使用 django 频道时如何使用频道而不是组?

Django 频道“组订阅中 N 个频道中的 ERROR Y 超出容量”

是否可以将 youtube 频道集成到 android 中?

使用 django 频道的 heroku 的正确 procfile / 要求是啥?