/ / Як сервер знає закрити підключення websocket, коли вкладка веб-сайту закрита - perl, websocket, webclient

Як сервер знає, щоб закрити підключення websocket, коли вкладка сайту закрита - perl, websocket, webclient

Я створив веб-сокет (за допомогою perl Net :: WebSocket ::Сервер, але я думаю, це не має значення). Моє запитання полягає в тому, що коли я закрию вкладку веб-сайту (не обов'язково весь браузер), сервер відключить конкретний сокет (називається моя подія відключення). Як серверу вдається це знати? Я не можу знайти прямого детального опису.

Відповіді:

4 для відповіді № 1

Якщо браузер закриває один кінець сокета (будь-якийявно через закриття, або неявно через те, що процес закінчується) сервер на іншому кінці з'єднання сокета буде повідомлено, що сокет закритий. Це лише частина того, як працює TCP. Навіть якщо повідомлення загубилось і сервер вважав, що сокет все ще відкритий, коли він намагався надсилати дані, він врешті-решт виявиться, що інший кінець не розпізнає пакети і відкине з'єднання.

У випадку вкладки браузера доцільно припускати, що браузер очистить / закриє будь-які ресурси, пов’язані з закритою вкладкою.


1 для відповіді № 2

Як TCP тісний зв'язок.

Кожна сторона припиняє свій кінець з'єднаннявід відправлення спеціального повідомлення із встановленим бітом FIN (фініш). Це повідомлення, іноді називається FIN, служить запитом на припинення з'єднання для інший пристрій, але, можливо, також переносить такі дані, як звичайний сегмент. Пристрій, що приймає FIN, відповідає на підтвердження, що він отримав FIN. З'єднання в цілому не вважається припиненим, поки обидві сторони не завершили процедуру припинення, надіславши FIN та отримавши ACK.