40

我使用以下命令连接到 NodeJs 中的套接字服务器:

client = net.createConnection()

我怎样才能正确断开与服务器的连接?

我试过client.end()了,甚至client.destroy()

但是当我使用 netstat 检查连接状态时,它显示连接处于状态 FIN_WAIT2。

如何完全关闭和销毁连接?

4

3 回答 3

35

net.createConnection()返回一个 Socket 对象。client.destroy()是你想要做的。

来源:http ://nodejs.org/docs/latest/api/net.html#socket.destroy

于 2012-02-08T14:51:49.823 回答
34

这是默认的 TCP 连接终止顺序,

在此处输入图像描述

通过调用client.end()节点js会向服务端发送FIN包,服务端会响应一个FIN包给客户端,接受socket终止。

根据 nodejs 文档,socket.end它的作用是,

半关闭插座。即,它发送一个 FIN 数据包。服务器可能仍会发送一些数据。

当收到 FIN 数据包时,从客户端到服务器的连接会自动关闭socket.on('close', .. )并被触发并返回 ACK。

因此,通过同意服务器和客户端来终止连接,以便服务器能够在关闭连接之前发送可能需要的数据。

但是在调用socket.destroy的时候,客户端连接会被破坏,没有强行接收到FIN包。最好的做法是socket.destroy尽可能避免调用。

参考:

于 2018-10-22T10:52:22.293 回答
6

我在 GNU/Linux 下安装了 nodejs 版本 11.15.0;在此配置中断开类似 telnet 的客户端的唯一方法是调用

socket.destroy()

其他方法socket根本不存在(例如:close()disconnect());发射closeend事件也不起作用。

于 2019-08-22T13:01:43.700 回答