Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Django通道-回声示例不工作_Javascript_Python_Django_Websocket_Django Channels - Fatal编程技术网

Javascript Django通道-回声示例不工作

Javascript Django通道-回声示例不工作,javascript,python,django,websocket,django-channels,Javascript,Python,Django,Websocket,Django Channels,我按照中的说明进行操作,但是我被echo示例卡住了,websocket创建正确并且连接到了服务器,但是当我向服务器发送任何内容时,我没有收到任何响应(在示例中,我说我应该看到一个警报窗口,其中包含我发送到套接字中的相同消息,但我没有看到,尽管我已经更改了console.log的警报,但仍然),我做错了什么 在settings.py中: 在routing.py中: 在consumers.py中: 在asgi.py中 import os from channels.asgi import get_c

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

在settings.py中:

在routing.py中:

在consumers.py中:

在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,在浏览器中,我转到服务器url,并在控制台中输入以下内容:

socket = new WebSocket("ws://" + window.location.host + "/chat/");
socket.onmessage = function(e) {
    alert(e.data);
}
socket.onopen = function() {
    socket.send("hello world");
}
同样,此时我应该看到一个警报窗口(或console.log消息),但我什么也没有得到

我提出的请求的状态为“待定”(尽管我读到并且第一条评论说这是正常的)

服务器输出如下所示:

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

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

我更改为twisted的旧版本,并将其修复。Hth

+1也有相同的问题。客户端WebSocket成功连接到服务器并可以从服务器接收数据,但在调用socket.send()时,从未调用
ws_receive
consumer方法。+1它确实有帮助——刚降级到16.2.0,它开始按预期工作。我将在Github上提出这个问题。事实上,它是解决方案。谢谢大家!我将Twisted降级到16.2.0,它成功了。
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'],
    })
import os
from channels.asgi import get_channel_layer

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

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