@JustRoo

Почему происходит закрытие websocket-соединений с кодом 1006?

День добрый.

Имеется следующая конфигурация - Redis + Webdis на Debian 7 x32.

Проблема в том, что после выполнения первой же команды все вебсокет-соединения закрываются с кодом 1006. Например, выполняем следующий код:

function testJSON() {
    var jsonSocket = new WebSocket("ws://ip:7379/.json");
    jsonSocket.onopen = function() {

        console.log("JSON socket connected!");
        jsonSocket.send(JSON.stringify(["SET", "hello", "world"]));
        jsonSocket.send(JSON.stringify(["GET", "hello"]));
    };
    jsonSocket.onmessage = function(messageEvent) {
        console.log("JSON received:", messageEvent.data);
    };
    jsonSocket.onclose = function(messageEvent) {
        //some logging
    };
}
testJSON();


При его выполнении получаем в firebug:

JSON socket connected!
JSON received: {"SET":[true,"OK"]}
onClose: error.code 1006

Событие onError не срабатывает. Сразу после ответа об установленном SET соединение закрывается. Команда GET, соответственно, уже не срабатывает‏. Тонкость в том, что если делать SUBSCRIBE, соединение остается открытым и прекрасно работает до выполнения следующей команды.

Вопрос: где искать подвох?
  • Вопрос задан
  • 8769 просмотров
Решения вопроса 1
@JustRoo Автор вопроса
Оказалось, это фича, а не баг. В коде (websocket.c):

if (cmd_is_subscribe(cmd)) {
r->keep_alive = 1;
}

Изменение этого параметра решило часть проблем.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы