Нужно ли подтвердить соединение через веб-сокет? - PullRequest
1 голос
/ 10 марта 2012

У меня есть веб-приложение, которое использует обновленную информацию с сервера. В прошлом клиент отправлял ajax-запрос через 1000 мс после завершения предыдущего. Это работало хорошо, но тратило ресурсы. Приложение было преобразовано для использования веб-сокета, когда клиент поддерживает его (и понижает до Ajax, когда это не так).

В прошлом ajax давал импульс, указывая, что браузер обновляет активность каждую секунду. Теперь он выглядит мертвым и просто сидит и работает. У меня есть следующее:

function connect() {
    $("#text1").text('Socket Status: '+socket.readyState+' (connecting)');
    socket.onopen = function(){
        $("#text1").text('Socket Status: '+socket.readyState+' (open)');
    }
    socket.onmessage = function(msg){ checkDATA(msg.data); }
    socket.onclose = function(){ 
        $("#text1").text('Socket Status: '+socket.readyState+' (close)');
        setTimeout(function () { connect(); },500);
    }
    socket.onerror = function(){ 
        $("#text1").text('Socket Status: '+socket.readyState+' (error) '+msg.data);
    }
}

Таким образом, у меня есть некоторая индикация статуса, но ничего, что показывает пульс. Должен ли я просто подделать импульс или есть что-то другое / лучшее, что можно / нужно сделать, чтобы убедиться, что соединение работает?

1 Ответ

1 голос
/ 10 марта 2012

Под ним веб-сокет - это просто TCP-сокет.Итак, сначала вы должны отслеживать все возможные состояния ошибок и уведомления сокетов.Затем, во-вторых, если вы хотите окончательно узнать, что сокет все еще жив, вам придется отправлять обычный фрагмент данных и искать ответ сервера.

Следует помнить, что на устройствах с питанием от батареи (телефонах,планшеты, ноутбуки), регулярное сетевое сердцебиение может привести к значительному расходу заряда батареи, если между тактами нет большой длительности.

Другой альтернативой может быть реализация очень умной обработки ошибок при отправке и некоторого интеллектуального обнаружения.для полученных данных.Для отправки, если вы отправляете некоторые данные и обнаруживаете, что получаете сообщение об ошибке, поскольку сокет кажется неработоспособным, вы можете автоматически разорвать соединение, создать новое и попытаться отправить данные еще раз.Единственное, что с этим связано: вы должны тщательно кодировать, чтобы избежать любого цикла, в котором вы получаете ошибку, воссоздаете сокет, получаете ошибку, воссоздаете сокет снова и снова.Как правило, вы пытаетесь повторить только небольшое количество раз (2-3) и интервал между повторными попытками будет меньше.

Для получения, если вы ожидаете, что вы будете получать обновления с сервера время от времени (скажем,по крайней мере, каждые 15 минут), и с момента последнего обновления прошло больше времени, чем вы, возможно, вы захотите проверить существующее соединение, чтобы убедиться, что оно все еще живое.

Преимущество использования этого типа техникичто, когда все работает правильно, вы не используете больше передачи / батареи, чем необходимо, но у вас все еще есть некоторые схемы обнаружения / обработки проблем, чтобы автоматически определять, когда может возникнуть проблема с подключением, и автоматически восстанавливать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...