Как сервер знает, чтобы закрыть соединение веб-сокета, когда вкладка сайта закрыта - PullRequest
0 голосов
/ 18 мая 2018

Я создал websocket (с perl Net :: WebSocket :: Server, но я думаю, что это не имеет значения).Мой вопрос заключается в том, что когда я закрываю вкладку веб-сайта (не обязательно весь браузер), сервер отключает конкретный сокет (вызывается мое событие отключения).Как серверу это удается узнать?Я не могу найти прямое подробное описание.

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Как TCP закрывает соединение.

Каждая сторона завершает свой конец соединения, отправляя специальное сообщение с установленным битом FIN (финиш),Это сообщение, иногда называемое FIN, служит запросом на завершение соединения с другим устройством, а также, возможно, передает данные, как обычный сегмент.Устройство, принимающее FIN, отвечает подтверждением FIN, чтобы указать, что оно было получено.Соединение в целом не считается разорванным до тех пор, пока обе стороны не завершат процедуру отключения, отправив FIN и получив ACK.

0 голосов
/ 19 мая 2018

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

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

...