如何断开NodeJs中的tcp套接字

mga*_*mer 29 javascript sockets tcpsocket node.js

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

client = net.createConnection()
Run Code Online (Sandbox Code Playgroud)

如何才能正确断开与服务器的连接?

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

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

如何完全关闭并破坏连接?

JP *_*son 24

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

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

  • 结束和毁灭之间有什么区别?在销毁之后,我还在netstat中看到状态FIN_WAIT2. (7认同)
  • 通过文档说"只有在出现错误时才需要",这似乎是关闭连接的唯一方法.对于我自己,我使用类似`socket.close = function(data){var Self = this; if(data)this.write(data,function(){Self.destroy();}); 否则this.destroy(); };` (4认同)
  • @mgamer``end()``只关闭套接字的写入流,远程主机可以保持他的写入流打开并向你发送数据 (2认同)

Jan*_*ith 11

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

在此处输入图片说明

通过调用client.end()节点,js将FIN数据包发送到服务器,服务器将以FIN数据包响应到客户端以接受套接字终止。

从nodejs文档开始socket.end,是什么,

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

收到FIN数据包后,会自动关闭从客户端到服务器的连接,并socket.on('close', .. )触发该连接并将ACK发送回去。

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

但是,在调用时socket.destroy,客户端连接将被破坏,而不会强行接收FIN数据包,这是避免这种情况的最佳做法。

参考:


bub*_*akk 5

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

socket.destroy()
Run Code Online (Sandbox Code Playgroud)

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