Я следую примеру кода, приведенному в документации по каналам, и столкнуться с проблемой. Сервер django успешно принимает веб-сокет из браузера, и отправка работает. Однако обработка сообщения (ws_message) на стороне сервера, по-видимому, не происходит, и на стороне браузера не зарегистрировано ни ответа (ни какого-либо предупреждения).
Отправка работает, но ответа нет
Это поведение очень похоже на то, что наблюдается в Каналы Django - пример Echo не работает а>. Однако, хотя переход на скрученный 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 dev (manage.py runserver), и через консоль браузера выполняется следующее:
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");
}
При получении сообщения должно быть выдано оповещение и выполнен вход в консоль. Однако ни то, ни другое не происходит.