2016-02-05 5 views
0

Я использую node.js и WebSocket-Node для создания простого сервера веб-чата.Обнаружение соединения WebSocket закрыто

Клиент - приложение для Android.

Сервер должен взаимодействовать с клиентами в два пути:

  • WebSocket сообщения, когда клиент подключен (приложение с открытым на переднем плане)
  • уведомления принудительного с помощью Google GCM еще

Но есть небольшая проблема, которую мне нужно выяснить.

Когда клиент подключен к серверу, и интернет-соединение падает, сервер не уведомляется об этом, потому что клиент не отправил закрывающий фрейм. Так что за 10 секунд сервер думает, что соединение все еще живое.

Если в течение этих 10 секунд сервер отправит сообщение через сокет, сообщение никогда не сможет связаться с клиентом.

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

Есть ли способ?

ответ

1

Со стороны сервера нечистое отсоединение (без сообщений об отключении) неотличимо от очень медленного соединения.

Что вам нужно сделать, это иметь какое-то сердцебиение. Для этого для этого используется WebSockets. Если ваша библиотека предоставляет это, то установите ping на задержку, которую вы готовы принять, и добавьте обработчик, когда это произойдет или не завершится после таймаута.

+0

Благодарим вас за ответ, но я не могу пинговать устройство каждую секунду, чтобы проверить соединение, он разрядит батарею. – Fr0z3n

+0

К сожалению, без передачи каких-либо данных невозможно обнаружить разъединение. – gzost

1

Отвечая на мой собственный вопрос, потому что: Это не possibile, и я нашел еще лучший способ справиться с мой конкретный случай.

  • Когда сервер отправляет клиенту сообщение, клиент отвечает на сервер, чтобы сервер знал, что сообщение было доставлено клиенту.
  • Если сервер не получил ответ от клиента после таймаута, соединение считается закрытым.
  • Приступайте к отправке сообщения через GCM (или сохраните его для отправки повторно при повторном подключении клиента).
Смежные вопросы