Каналы Django: примеры проблем с эхом

Я следую примеру кода, приведенному в документации по каналам, и столкнуться с проблемой. Сервер 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");
}

При получении сообщения должно быть выдано оповещение и выполнен вход в консоль. Однако ни то, ни другое не происходит.


person Kenneth Lim    schedule 03.08.2016    source источник


Ответы (1)


Вы должны подключить ws_message потребителя к websocket.receive, а не websocket.recieve.

person Raja Simon    schedule 03.08.2016
comment
И еще раз пебкач. Спасибо за помощь в ловле этого. - person Kenneth Lim; 03.08.2016