Node.js网络服务器没有收到某些客户端断开连接

时间:2014-09-11 02:08:23

标签: node.js sockets unix disconnect

我运行的Node.js网络套接字服务器可以正常工作,连接的客户端数量很少。当我将数量增加到200个客户端连接时,所有初始连接都建立并正确通信但是当我按Ctrl-C关闭客户端程序时,只在服务器上接收到一些断开连接(通过错误:读取ECONNRESET消息) )。

我正在听事件:关闭,超时,断开连接,错误和结束 我还检查数据事件是否收到长度为0的数据,但是这种情况永远不会被触发。

当同时有大量断开连接时,错误/断开连接事件似乎不会触发。

服务器和客户端在运行时不会收到任何异常或错误;两者都是Node.js。

netstat -i显示所有连接都在客户端上终止

lsof -i显示仍在服务器上建立的许多连接

(lsof在服务器上保持打开的连接示例)

节点5569根18u IPv4 4236971 0t0 TCP xxx.xxx.xxx.xxx:2048->xxxxxx.hsd1.ca.comcast.net:12501(ESTABLISHED)

还有其他人遇到过这个吗?

2 个答案:

答案 0 :(得分:0)

你应该考虑加入某种特殊的ping / keepalive消息,客户端和服务器定期发送这些消息,以更准确/快速地检查两端的死套接字。

答案 1 :(得分:0)

看起来ECONNRESET仅在连接关闭时触发,同时在套接字上写入/读取数据。如果套接字在没有流量时关闭,并且客户端没有向服务器发送FIN数据包(因为在客户端已经崩溃或突然关闭连接)并且套接字上没有超时/保持活动,那么另一个side永远不会知道连接已经终止,直到它再次尝试在套接字上发送内容并意识到连接已断开。