2016-03-18 2 views
2

Я тестирую соединение для своего приложения с клиентской стороны с различными браузерами и наблюдая за различными режимами.Тестирование повторного соединения с различными браузерами

Шаги:

  1. Подключите мое приложение к моему серверу
  2. отсоедините сетевой кабель

    • Firefox: потерянная событие соединения немедленно уволен
    • Chrome: ничего
    • IE11: похоже, не сразу распознает потерянное соединение

Мое приложение пытается сразу же подключиться, как только оно получит сообщение о потерянном соединении из браузеров.

Я знаю, что это возможно вплоть до поведения разных браузеров. Что-нибудь, что я могу сделать с клиентской стороны, чтобы преодолеть причудливость браузера?

ответ

0

Отсоедините сетевой кабель

Это, вероятно, не делать то, что вы думаете, что он делает.

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

Перед началом работы с Windows 7 вся сетевая карта закрыта, когда ее кабель cat5 потянут, который закрыл все TCP-соединения, проходящие через него. Это может ввести людей в заблуждение, полагая, что они наблюдают за закрытием соединения. Удаленный TCP-протокол, однако, наблюдает только за отключением TCP. И сохраняет соединение еще в ESTABLISHED

Чтобы полностью закрыть TCP-соединение, пользователи Windows могут использовать TCPView для идентификации и последующего закрытия соответствующего сокета. Пользователи Linux могут использовать fuser с тем же эффектом при некоторых прыжках с обручем. В противном случае используйте простой прокси TCP между клиентом с сервером и убейте этот процесс, чтобы закрыть TCP-соединение из браузера.

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

С нетерпением жду HTML5 - WebSocket ведет себя больше как его базовое TCP-соединение, и будет уведомлять вас о закрытии.

+0

: o Я не знал, что отсоединить кабель Ethernet не приведет к немедленному отключению. Да ты прав. Я должен иметь клиентский интерфейс для отслеживания подключения к моему серверу. – bili

1

Вы пробовали Offline.js? В зависимости от вашего конечного варианта использования, который может решить проблему для вас.

1

Вы можете прослушивать сокет, и когда вы получаете сообщение об ошибке при прослушивании, вы можете делать то, что хотите. JQuery.webSocket может быть полезным в вашем случае.

1

Используя jQuery, вы можете отправить запрос AJAX каждые несколько секунд на сервер, чтобы проверить состояние соединения.

window.myInterval = setInterval(
    function() { 
     $.ajax(
      type: "GET", 
      url: "http://your.server.io/test_url.php", 
      statusCode: { 
       503: function() { 
        alert("Service Unavailable"); 
        // your code 
       } 
      } 
     ); 
    } 
, 5000); 

Легко настраивается для захвата потерянных и резервных событий.

window.connectionUp = true; 
window.myInterval = setInterval(
    function() { 
     $.ajax(
      type: "GET", 
      url: "http://your.server.io/test_url.php", 
      statusCode: { 
       503: function() { 
        alert("Service Unavailable"); 
        window.connectionUp = false; 
        // your code 
       } 
       200: function() { 
        alert("Service Available"); 
        if (window.connectionUp = false) { 
         // reconnect 
        } 
        window.connectionUp = true; 
        // your code 
       } 
      } 
     ); 
    } 
, 5000); 
+0

Спасибо за идею! Кажется, это путь для меня. – bili

Смежные вопросы