Как обнаружить и удалить битые TCP-соединения в витых? - PullRequest
0 голосов
/ 02 сентября 2018

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

Поскольку я разрешаю только одно устройство одному соединению, если TCP-соединение обрывается, и сервер не получил запрос на отключение, и новый запрос на соединение будет отклонен.

Да, я определяю таймер таймаута в витой. Но мы думаем, что таймер тайм-аута слишком длинный, около 5 минут. После ожидания в течение 5 минут устройство может повторно подключиться к серверу.

Есть идеи для решения такой проблемы? Пока что я добавляю команду пользователя через web api, чтобы вызвать команду отключения на сервере сокетов и разрешить новое соединение.

Но есть идеи лучше? Пинг обратно?

1 Ответ

0 голосов
/ 03 сентября 2018

Я думаю, что вам нужно реализовать пульс, через определенный интервал клиент должен отправить некоторые данные / событие на сервер (пульс).

Сервер может отслеживать эти события пульса и устанавливать тайм-аут. Если в течение некоторого времени не было пульса от клиента, вы можете считать, что клиентское соединение сейчас не работает, и может отключить клиент с помощью метода lossConnection транспортного объекта. Вы можете найти транспортный объект во всех классах протокола.

transport.loseConnection()

Я использую этот механизм в игровом сервере в реальном времени.

...