Как отключиться от сокета tcp в NodeJs - PullRequest
26 голосов
/ 08 февраля 2012

Я подключаюсь к серверу сокетов в NodeJs с помощью этой команды:

client = net.createConnection()

Как мне тогда правильно отключиться от сервера?

Я пытался client.end() и даже client.destroy()

но когда я проверяю состояние соединения с помощью netstat, это показывает, что соединение находится в состоянии FIN_WAIT2.

Как мне вообще закрыть и уничтожить соединение?

Ответы [ 3 ]

23 голосов
/ 08 февраля 2012

net.createConnection() возвращает объект Socket. client.destroy() - это то, что вы хотите сделать.

Источник: http://nodejs.org/docs/latest/api/net.html#socket.destroy

8 голосов
/ 22 октября 2018

Это последовательность завершения соединения TCP по умолчанию,

enter image description here

Вызвав client.end(), узел js отправит пакет FIN на сервер, а сервер ответит клиентом пакетом FIN, чтобы принять завершение сокета.

Что касается документации nodejs, то, что делает socket.end,

Полузакрыть сокет. то есть он отправляет пакет FIN. Возможно, сервер все еще отправит некоторые данные.

Когда пакет FIN получен, соединение с сервером от клиента автоматически закрывается, и запускается socket.on('close', .. ), и ACK отправляется обратно.

Таким образом, соединение прерывается согласованием как сервера, так и клиента, чтобы сервер мог отправлять данные, которые могут потребоваться, до закрытия соединения.

Но при вызове socket.destroy клиентское соединение будет разорвано без принудительного получения пакета FIN, и это лучший способ избегать, если это возможно.

Справка:

0 голосов
/ 23 июля 2017

То, что вы хотите, это client.close (), клиент поддерживает затем для будущих соединений. Если вы не хотите больше использовать соединение в ближайшем будущем, вы можете уничтожить () его. Я должен сказать, по моему скромному мнению, семантика не так последовательна в net.Socket. Вы подключаете () сокет, а противоположность закрывается (). open () сокет будет более подходящим. client-end () отправляет пакет fin на сервер

...