首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点JS + Socket.io应用程序在一段时间后停止接收事件

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

Stack Overflow用户
提问于 2014-01-17 12:41:13
回答 1查看 1.9K关注 0票数 2

我正在开发一个Node + socket.io应用程序。

整个应用程序运行良好,,但大约5分钟后,服务器停止接收客户端触发的事件。 :(

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

代码语言:javascript
复制
   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

我还确信客户端正在发出消息,因为我可以看到在工具中发送的数据。下面是要发送的示例数据

代码语言:javascript
复制
5:::{"name":"ev_SendChatMessage","args":[{"chatMsg":"dgdfsgfs","aID":"10010001835364"}]}

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

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

客户端代码

代码语言:javascript
复制
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" } );
}

服务器代码

代码语言:javascript
复制
    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条消息之后才会发生。

编辑:我试图将传输机制从Web套接字更改为“xhr-轮询”。即使这样,我也面临着同样的问题,相反,我可以在调试中看到一些有价值的东西。

代码语言:javascript
复制
   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应用程序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-21 14:05:49

我找到了解决我的问题的办法。

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

当池中的连接用完后,应用程序继续等待从池中获取数据库连接。

简而言之,魔鬼就在细节里。我的问题中没有提到的细节。哈哈!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21186291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档