节点JS + Socket.io应用程序在一段时间后停止接收事件

我正在一个节点的JS + socket.io应用程序。

整个应用程序工作正常, 但大约5分钟后,服务器停止接收客户端触发的事件。 🙁

当事件没有被触发时,我可以看到服务器正在成功接收心跳。

debug - got heartbeat packet debug - cleared heartbeat timeout for client 4cKMC4Iqje-7dDfibJZm debug - set heartbeat interval for client 4cKMC4Iqje-7dDfibJZm debug - emitting heartbeat for client 4cKMC4Iqje-7dDfibJZm debug - websocket writing 2:: debug - set heartbeat timeout for client 4cKMC4Iqje-7dDfibJZm 

我也确定客户端正在发送消息,因为我可以看到在Chrome开发人员工具中发送的数据。 以下是正在发送的示例数据

 5:::{"name":"ev_SendChatMessage","args":[{"chatMsg":"dgdfsgfs","aID":"10010001835364"}]} 

另外,我在服务器机器上检查了TCP Dump的结果,它正在成功接收数据包。

节点版本是v0.10.21 socket.io版本是0.9.16

客户代码

 var socket; $(function() { // Connect to the Live Proctoring Server. socket = io.connect('http://autoproc.am.in:8899'); }); function SendChatMsg() { // This get called on click of a button socket.emit( "ev_SendChatMessage", { chatMsg : "textToSend", aID : "123" } ); } 

服务器代码

  var options = {}; var io = require( 'socket.io' ).listen( 8899, options ); // Called when a connection is made with a new Client function OnConnection ( socket ) { console.log( "Connection has been made with " + socket.id ); socket.on('ev_SendChatMessage', SendChatMessageFromModerator ); socket.on('disconnect', OnDisconnect ); } // This stops getting called after some time. In the beginning it is getting called successfully. function SendChatMessageFromModerator( data ) { console.log( data ); } 

编辑:更准确地说,这个事情只有在收到7-8条消息并发出7-8条消息之后才会发生。

编辑:我试图改变传输机制从networking套接字到“xhr-polling”。 即使这样,我也面临着同样的问题,相反,我可以在debugging中看到有价值的东西。

  debug - xhr-polling received data packet 5:::{"name":"ev_SendChatMessage","args":[{"chatMsg":"sfsdfdsfs","aID":"10010001167896"}]} debug - clearing poll timeout debug - xhr-polling writing 8:: debug - set close timeout for client JfaWyiP3YqTRmqyzz4z6 debug - xhr-polling closed due to exceeded duration debug - setting request GET /socket.io/1/xhr-polling/JfaWyiP3YqTRmqyzz4z6?t=1389965419417 debug - setting poll timeout debug - discarding transport debug - cleared close timeout for client JfaWyiP3YqTRmqyzz4z6 

这清楚地表明数据已经到达Node JS应用程序。

我find了解决我的问题..

问题是我正在创build一个数据库连接池,但是我没有使用dbConn.release();来释放连接dbConn.release();

一旦池中的连接耗尽,应用程序就会一直等待从池中获取数据库连接。

总之,魔鬼是在细节。 我没有提到的细节在我的问题。 哈哈哈.. !!