我使用以下命令在 Node.js 中连接到套接字服务器:
client = net.createConnection()
我应该如何正确地从服务器断开连接?
我尝试了client.end()
甚至是client.destroy()
但是当我使用netstat检查连接状态时,它显示连接处于FIN_WAIT2状态。
我该如何完全关闭和销毁连接?
我使用以下命令在 Node.js 中连接到套接字服务器:
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
end()
方法只关闭套接字的写入流,远程主机可以保持其写入流的打开状态并向您发送数据。 - bara这是默认的TCP连接终止序列,
通过调用client.end()
,Node.js将向服务器发送FIN数据包,并且服务器将响应一个FIN数据包以接受套接字终止。
根据Node.js文档,socket.end
的作用是:
半关闭套接字。即,它发送一个FIN数据包。服务器仍然可能发送一些数据。
当收到FIN数据包时,客户端与服务器之间的连接将自动关闭,并触发socket.on('close', .. )
事件,并发送ACK。
因此,连接由服务器和客户端共同协商终止,因此服务器能够发送在关闭连接之前可能需要的数据。
但是,如果可能的话,最好避免调用socket.destroy
,因为它会强制销毁客户端连接而不接收FIN数据包。
参考资料:
我在GNU/Linux下安装了nodejs 11.15.0版本。在这个配置下,断开类似telnet的客户端的唯一方式是调用:
socket.destroy()
socket
上的其他方法已经不存在了(例如:close()
或 disconnect()
),同时发出 close
或 end
事件也不起作用。
end()
将需要另一端做出反应,但在我的情况下它没有... - Alexis Wilke
client.close()
吗? - fent