События websocket onclose / onerror не запускаются при сбое сервера - PullRequest
3 голосов
/ 03 ноября 2010

Я наблюдал следующее поведение в Firefox 4 и Chrome 7:

Если сервер, на котором работает демон websocket, аварийно завершает работу, перезагружается, теряет сетевое подключение и т. Д., То события onclose или onerror не запускаются на стороне клиента. Я ожидаю, что одно из этих событий будет запущено, когда соединение разорвано по любой причине.

Если, однако, демон сначала корректно отключается, то запускается событие «onclose» (как и ожидалось).

Почему клиенты воспринимают подключение к веб-сокету как открытое, если демон не отключается должным образом?

Я хочу положиться на ожидаемое поведение, чтобы информировать пользователя о том, что сервер стал недоступен или что интернет-соединение клиента нарушено.

1 Ответ

6 голосов
/ 03 ноября 2010

TCP таков .Самая последняя стандартная версия WebSockets (v76) имеет механизм чистого отключения .Но без этого (или если он не может быть отправлен) вы полагаетесь на обычную очистку сокета TCP, которая занимает несколько минут (или часов).

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

Вы также можете добавить механизм пульса (ala TCP keep alive ) в ваше приложение, чтобы определить, когда другая сторона уходит.

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