Django 频道:Echo 示例问题
Django channels: Echo example issues
我正在按照 channels documentation 提供的示例代码进行操作,并且 运行 遇到了问题。 django 服务器成功地接受了来自浏览器的 websocket 并且发送似乎有效。然而,消息的服务器端处理 (ws_message) 似乎没有发生,并且浏览器端没有注册任何回复(也没有任何警报)。
Sending seems to work, but no reply
此行为与 中观察到的行为非常相似。然而,虽然切换到扭曲的 16.2.0 是解决这种情况的方法,但我已经在扭曲的 16.2.0 上了。
代码片段如下:
consumers.py
from django.http import HttpResponse
from channels.handler import AsgiHandler
def ws_message(message):
print("sending message ", message.content["text"])
raise
message.reply_channel.send({
"text": message.content["text"]
})
routing.py
from channels.routing import route
from channel_test.consumers import ws_message
channel_routing = [
route("websocket.recieve", ws_message),
]
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
"channels",
"channel_test",
"argent_display"
]
CHANNEL_LAYERS = {
"default":{
"BACKEND": "asgiref.inmemory.ChannelLayer",
"ROUTING": "argent_display.routing.channel_routing"
}
}
django 开发服务器然后是 运行 (manage.py 运行server) 并通过浏览器控制台执行以下操作:
socket = new WebSocket("ws://" + window.location.host + "/chat/");
socket.onmessage = function(e) {
console.log('test');
alert(e.data);
}
socket.onopen = function() {
socket.send("hello world");
}
收到消息后,应发出警报并登录控制台。然而,两者都没有发生。
您应该将 ws_message
消费者连接到 websocket.receive
而不是 websocket.recieve
。
我正在按照 channels documentation 提供的示例代码进行操作,并且 运行 遇到了问题。 django 服务器成功地接受了来自浏览器的 websocket 并且发送似乎有效。然而,消息的服务器端处理 (ws_message) 似乎没有发生,并且浏览器端没有注册任何回复(也没有任何警报)。
Sending seems to work, but no reply
此行为与
代码片段如下:
consumers.py
from django.http import HttpResponse
from channels.handler import AsgiHandler
def ws_message(message):
print("sending message ", message.content["text"])
raise
message.reply_channel.send({
"text": message.content["text"]
})
routing.py
from channels.routing import route
from channel_test.consumers import ws_message
channel_routing = [
route("websocket.recieve", ws_message),
]
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
"channels",
"channel_test",
"argent_display"
]
CHANNEL_LAYERS = {
"default":{
"BACKEND": "asgiref.inmemory.ChannelLayer",
"ROUTING": "argent_display.routing.channel_routing"
}
}
django 开发服务器然后是 运行 (manage.py 运行server) 并通过浏览器控制台执行以下操作:
socket = new WebSocket("ws://" + window.location.host + "/chat/");
socket.onmessage = function(e) {
console.log('test');
alert(e.data);
}
socket.onopen = function() {
socket.send("hello world");
}
收到消息后,应发出警报并登录控制台。然而,两者都没有发生。
您应该将 ws_message
消费者连接到 websocket.receive
而不是 websocket.recieve
。