Django频道 - 回声示例不起作用

paz*_*s10 10 javascript python django websocket django-channels

我正在按照文档站点中的说明进行操作,但我遇到了echo示例,websocket已正确创建并且已连接到服务器但是当我向服务器发送任何内容时,我没有得到任何响应(在示例中)说我应该看到一个警告窗口,其中包含我发送到套接字的相同消息,但我没有,虽然我已经更改了console.log的警报,但仍然),我做错了什么?

settings.py中:

INSTALLED_APPS = {
    ...
    'channels',
    'myapp',
    ...
} 

...
# Channels settings
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "asgiref.inmemory.ChannelLayer",
        "ROUTING": "myapp.routing.channel_routing",
    },
}
Run Code Online (Sandbox Code Playgroud)

routing.py中:

from channels.routing import route
from myapp.consumers import *

channel_routing = [
    route("websocket.receive", ws_receive),
]
Run Code Online (Sandbox Code Playgroud)

consumers.py中:

def ws_receive(message):
    # ASGI WebSocket packet-received and send-packet message types
    # both have a "text" key for their textual data.
    message.reply_channel.send({
        "text": message.content['text'],
    })
Run Code Online (Sandbox Code Playgroud)

在asgi.py

import os
from channels.asgi import get_channel_layer

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")

channel_layer = get_channel_layer()
Run Code Online (Sandbox Code Playgroud)

然后我运行:python manage.py runserver,在我的浏览器中我转到服务器url,在控制台中我输入以下内容:

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

同样,此时我应该看到一个警告窗口(或console.log消息),但我什么都没得到.

响应

我提出的请求具有待处理状态(虽然我在这里阅读并且第一条评论说这是正常的)

要求

服务器输出如下所示:

服务器输出

每次我尝试通过浏览器中的websocket发送内容时,服务器只打印CONNECT但没有显示来自js控制台的日志.

编辑:我已经在我的浏览器中对echo.websocket.org测试了websockets,我得到了预期的答案:

测试的WebSocket

小智 7

我改成了旧版本的扭曲并修复了它.心连心

  • +1确实有所帮助 - 只是降级到16.2.0并开始按预期工作.我会在Github上提出这个问题. (2认同)