Ответ 1
net.createConnection()
возвращает объект Socket. client.destroy()
- это то, что вы хотите сделать.
Источник: http://nodejs.org/docs/latest/api/net.html#socket.destroy
Я подключаюсь к серверу сокетов в NodeJs, используя эту команду:
client = net.createConnection()
Как я могу правильно отключиться от сервера?
Я пробовал client.end()
и даже client.destroy()
но когда я проверяю состояние подключения с помощью netstat, он показывает, что соединение находится в состоянии FIN_WAIT2.
Как я могу закрыть и уничтожить соединение вообще?
net.createConnection()
возвращает объект Socket. client.destroy()
- это то, что вы хотите сделать.
Источник: http://nodejs.org/docs/latest/api/net.html#socket.destroy
Это последовательность завершения соединения TCP по умолчанию,
Вызвав client.end()
, узел js отправит пакет FIN на сервер, и сервер ответит клиентом пакетом FIN, чтобы принять завершение сокета.
Что касается документации по nodejs, то, что делает socket.end
, это
Полузакрыть розетку. то есть он отправляет пакет FIN. Возможно, сервер все еще отправит некоторые данные.
Когда пакет FIN получен, соединение с сервером от клиента автоматически закрывается, и запускается socket.on('close', .. )
, а ACK отправляется обратно.
Таким образом, соединение прекращается путем согласования как сервера, так и клиента, чтобы сервер мог отправлять данные, которые могут потребоваться, перед закрытием соединения.
Но при вызове socket.destroy
клиентское соединение будет прервано без принудительного получения пакета FIN, и рекомендуется избегать этого, если это возможно.
Справка:
У меня установлена версия nodejs 11.15.0 под GNU/Linux; единственный способ отключить telnet-подобный клиент в этой конфигурации - вызвать
socket.destroy()
Других методов в socket
просто больше не существует (например: close()
или disconnect()
); также испускание событий close
или end
не работает.
То, что вы хотите, это client.close(), клиент продолжает жить для будущих подключений. Если вы больше не хотите использовать соединение в ближайшем будущем, вы можете его уничтожить(). Я должен сказать, по моему скромному мнению, семантика не так согласована в net.Socket. Вы подключаете() к Socket, а наоборот - close(). open() Сокет будет более подходящим. client-end() отправляет фин-пакет на сервер