Django channels - Echo示例无法正常工作

10
我正在遵循文档站点中的说明,但我在echo示例中卡住了。websocket已经正确创建并连接到服务器,但是当我向服务器发送任何内容时,我没有得到任何响应(在示例中说我应该看到一个警报窗口,其中包含我发送到套接字中的相同消息,但我没有,尽管我已经将警报更改为console.log,但仍然没有),我做错了什么?

settings.py中:

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

...
# Channels settings
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "asgiref.inmemory.ChannelLayer",
        "ROUTING": "myapp.routing.channel_routing",
    },
}

routing.py文件中:

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

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

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'],
    })
在asgi.py中。
import os
from channels.asgi import get_channel_layer

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

channel_layer = get_channel_layer()

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

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

在此时,我应该看到一个警报窗口(或console.log消息),但我什么也没有看到。

response

我发出的请求状态是挂起的(虽然我在这里读到了,并且第一条评论说这是正常的)。

requests

服务器输出如下:

server-output

每次我尝试通过浏览器发送websocket时,服务器只会打印CONNECT,但JS控制台没有显示任何日志。

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

test-websocket


1
+1 遇到了同样的问题。客户端 WebSocket 成功连接到服务器并可以接收来自服务器的数据,但是在调用 socket.send() 方法时,ws_receive 消费者方法从未被调用。 - whusterj
1个回答

7

我更改了Twisted的旧版本,问题就解决了。希望能够帮到你。


2
+1 这确实有帮助 —— 我刚刚降级到了16.2.0版本,问题得到了预期的解决。我将在Github上提出此问题。 - whusterj
1
事实上,这就是解决方案。谢谢大家!我将Twisted降级到16.2.0版本,问题得到了解决。 - pazitos10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接