Вверх ↑
Этот топик читают: Гость
Ответов: 30
Рейтинг: 3
#1: 2019-10-20 21:07:17 ЛС | профиль | цитата
Заметил такую проблемку когда клиент подключился к серверу и при отключении питания у клиента то TCP сервер не выдает на точку onDisconnect и в альтернативном TCP сервере onClientDisconnect соответствующих событий.
Или так и должно быть?
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 4621
Рейтинг: 746
#2: 2019-10-21 10:32:39 ЛС | профиль | цитата
Вероятно, да. Для установки соединения клиент и сервер обмениваются по сети пакетами. Когда соединение установлено - данные могут передаваться. А могут и не передаваться (неограниченное количество времени) - соединение всё равно считается работающим. Для завершения соединения (по которому можно выдать onDisconnect) одна из сторон отправляет соответствующий специальный пакет. При отключении питания клиент уже ничего не может отправить, поэтому нету определения завершения соединения - для сервера оно всё ещё активно.
Могут быть нюансы: например, если питание отключить на роутере, к которому подключена сетевая карта сервера (или выдернуть кабель из карты), то у сервера может сработать ошибка, по которой он удалит всех клиентов (и выдаст событие onDisconnect). А если сбой происходит за роутером или по другую сторону провайдера, то определить это нельзя.
Тем не менее, есть такая штука как "keep alive", реализуемая в фоновом режиме на уровне API. По соединению с некоторым интервалом отправляются специальные пакеты. Если при отправке произойдет ошибка, то, вероятно, можно будет получить событие onDisconnect. Но в альтернативных компонентах пока не реализовано.

Редактировалось 1 раз(а), последний 2019-10-21 10:33:23
карма: 26

0
Ответов: 30
Рейтинг: 3
#3: 2019-10-21 12:10:18 ЛС | профиль | цитата
Большое спасибо за такой развернутый ответ.
Возможно стоит мне попробовать тогда периодически пинговать устройства и вносить корректировку в списке подключенных клиентов
карма: 0

0
Ответов: 1328
Рейтинг: 69
#4: 2019-10-24 13:30:29 ЛС | профиль | цитата
Evg, если используется мобильная сеть, такая проблема будет даже без отключения питания, 10 устройств за сутки оставляли 200-300 открытых соединений. Решили проблему так: устройство передает пакет данных, в котором есть его идентификатор, если в течении заданного промежутка времени пакета нет, соединение с ним разрывается.
карма: 2

0
4
Сообщение
...
Прикрепленные файлы
(файлы не залиты)