Веб-сокет каналов Django отключается после рукопожатия

Я создаю простую чат-комнату по примерам каналов django. Вчера все работало как шарм, и мне удалось создать чат и даже поболтать там. Внезапно без каких-либо изменений в моем коде Websocket начал отключаться сразу после подключения и рукопожатия.

My setup:
Django == 1.10.5
Python == 2.7
channels == 1.1.8
asgi-redis == 1.4.2
daphne == 1.3.0

Мой файл consumer.py выглядит так:

consumers.py:
@channel_session
def ws_connect(message):
    room = message.content['path'].strip("/")
    message.channel_session['room'] = room
    Group("chat").add(message.reply_channel)
    message.reply_channel.send({"accept": True})

И внешняя часть:

 $(function() {
        // When we're using HTTPS, use WSS too.
        var ws_scheme = window.location.protocol = "ws";
        var chatsock = new WebSocket(ws_scheme + '://' + window.location.host + window.location.pathname);


        chatsock.onmessage = function(message) {
            var data = JSON.parse(message.data);
            var chat = $("#chat");
            var ele = $('<tr></tr>');
            console.log(data);

            ele.append(
                $("<td></td>").text(data.timestamp)
            );
            ele.append(
                $("<td></td>").text(data.handle)
            );
            ele.append(
                $("<td></td>").text(data.message)
            );

            chat.append(ele)
        };

        $("#chatform").on("submit", function(event) {
            var time = new Date();
            var string = time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds();
            // var timestamp = time.getHourMinuteSecond();
            var message = {
                timestamp: string,
                handle: $('#handle').val(),
                message: $('#message').val()
            };
            console.log("submit");
            chatsock.send(JSON.stringify(message));
            $("#message").val('').focus();
            return false;
        });
    });

Возможно, обновление какой-то технологии отсутствует. Я изо всех сил пытаюсь понять, почему это происходит. В settings.py у меня есть следующая конфигурация для уровня канала redis:

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "asgi_redis.RedisChannelLayer",
        "CONFIG": {
            "hosts": [("localhost", 6379)],
        },
        "ROUTING": "config.routing.channel_routing",
    },
}

У меня есть другая логика веб-сокета для уведомлений, которая также отключается сразу после рукопожатия. Я пробовал обновить Django до 1.11. но не повезло. В routing.py приложения чата:

chat_routing = [
    route("websocket.connect", consumers.ws_connect),
    route("websocket.receive", consumers.ws_message),
    route("websocket.disconnect", consumers.ws_disconnect),
]

Я использую Linux Ubuntu 16.04, и единственное, что я обновил за последние несколько дней, - это версия Chrome. Итак, есть идеи, что мне делать?


person Vasil Shtiliyanov    schedule 04.10.2017    source источник


Ответы (2)


Оказалось, проблема с обновлением Google Chrome. вероятно, возврат к предыдущей версии решит проблему, если я смогу это сделать, но проблема в том, что я пробовал ее в Mozilla, и она по-прежнему работает как шарм.

person Vasil Shtiliyanov    schedule 04.10.2017
comment
Есть какие-нибудь сведения о том, когда это будет исправлено. Прошло два месяца, а я все еще вижу такое поведение - person Chad Van De Hey; 09.12.2017
comment
Когда я разрабатывал свой проект, выяснилось, что все дело в localhost и chrome. Я считаю, что если вы обслуживаете свой проект, используя свой IP-адрес, все будет в порядке - python manage.py runserver ‹set_ip: port› - person Vasil Shtiliyanov; 10.12.2017
comment
Это полезная информация, не могли бы вы дать ссылку на то, как вы ее сузили? - person battery; 13.09.2019

Добавив к ответу @Vasil выше, это, похоже, проблема в Chrome, когда localhost используется в качестве доменного имени вашего запущенного проекта django. Если вы запустите проект с IP вместо Localhost, Chrome не вызовет никаких проблем.

person Chad Van De Hey    schedule 11.12.2017