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

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

  1. Как сервер может обнаружить, что клиент был отключен, и вызвать функцию в сокете.on ('отключить') на стороне сервера.Подобно клиенту, он также имеет socket.on («отключение»), который будет запускаться на стороне клиента при закрытии сервера.Я установил очень высокий pingInterval и очень высокий pingTimeout на сервере, но, похоже, и сервер, и клиент могут обнаружить, что другой был немедленно отключен (по событию триггера на ('отключение')).

  2. О пинг / понг-пакете заключается в том, что обе стороны (сервер и клиент) отправят «пинг» другой стороне и будут ждать ответ «понг» или единственная сторона сервера отправит «пинг» клиенту, а клиент отправит обратно ».pong 'на сервер, когда он получает пакет' ping '.

Кто-нибудь знает, пожалуйста, объясните мне.Большое спасибо

1 Ответ

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

Как сервер может обнаружить, что клиент был отключен, и вызвать функцию в socket.on ('отключить') на стороне сервера.Подобно клиенту, он также имеет socket.on («отключение»), который будет запускаться на стороне клиента при закрытии сервера.Я установил очень высокий pingInterval и очень высокий pingTimeout на сервере, но, похоже, и сервер, и клиент могут обнаружить, что другой был немедленно отключен (по событию триггера (отключение)).

Aрегулярное отключение обнаруживается, когда TCP-соединение закрывается по какой-либо причине.Сервер увидит, что соединение TCP будет закрыто, когда веб-страница либо закроет соединение socket.io вручную, либо когда страница удалена, а браузер закроет все открытые соединения с этой веб-страницы.Таким образом, когда соединение работает нормально и затем закрывается клиентом или сервером, другой конец немедленно увидит закрытое соединение TCP.Это не имеет ничего общего с интервалами пинг-понга.Они используются для чего-то другого (описано ниже).

Поскольку сокет TCP все еще может быть технически подключен (еще не закрыт), но на самом деле может быть неработоспособен и больше не работать, для определения значения используются ping и pong.если соединение с таким открытым TCP-сокетом больше не работает.Если это так (не получая своевременного ответа от другой стороны от ping / pong), то сокет закрывается, и затем генерируется событие отключения.

О ping / pongпакет означает, что обе стороны (сервер и клиент) отправят «ping» другому и ждут ответа «pong» или единственная сторона сервера отправляет «ping» клиенту, а клиент отправляет обратно «pong» серверу, когдаполучает пакет «ping».

Я не могу найти какой-либо конкретной документации по этому вопросу, но похоже, что серверный код ожидает получения ping сообщений от клиента, и он закроет соединение, если нетПинг или другой пакет данных получен в течение определенного периода времени ожидания.Как только сервер получает ping, он немедленно отправляет pong обратно клиенту.Таким образом, предположительно, клиент отправляет ping и ищет ответ pong в течение определенного периода времени.Если он не обнаружит ответ pong в течение определенного времени, он закроет соединение на своем конце (и может попытаться восстановить соединение, в зависимости от конфигурации).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...