Я пытаюсь выяснить, как чистый класс Node.js работает с таймаутами и keepalives. Я устанавливаю их на стороне сервера и смотрю, чтобы увидеть, в чем разница, устанавливая эти переменные. Я заметил, что если я установить KeepAlive на следующее:Node.js set setKeepAlive не останавливает таймаут с помощью setTimeout
// Set keepalive
socket.setKeepAlive(true, 30000);
Это будет абсолютно на самом деле отправлять пакеты проверки, которые я наблюдаю с Wireshark.
Однако, даже если я подписаться на события тайм-аута сокета, сокет не будет разрываться. Поэтому я пытаюсь установить параметр таймаута сокета.
// Set timeout variables
socket.setTimeout(60000);
Даже в сочетании с опцией keepAlive гнездо все еще разгоняется через 60 секунд после последнего реального переданного пакета.
Так что мой вопрос, что точка Keepalive, если он не делает ничего, чтобы предотвратить сокетов время ожидания?
Что такое «мертвый» разъем? Если я вытащил провод Ethernet, гнездо все еще остается в живых и не излучает никаких сигналов конца/ошибки. Это даже позволит мне по-прежнему пытаться отправлять данные на него. Он отправляет только один живой сигнал, а затем ничего не испускает. Розетка должна действительно погибнуть. –
Мертвые сокеты - это гнезда, которые не ответили на отправленные датчики keepalive в течение x времени (количество зондов keepalive, количество времени и другие параметры являются настройками уровня ОС и настраиваются (по крайней мере, на * nix)). Часто значения по умолчанию для этих средних мертвых сокетов не обнаруживаются до нескольких часов позже. Вот почему всегда лучше использовать сообщения keepalive на уровне приложения для определения мертвых соединений. – mscdex