簡體   English   中英

一段時間后,Node JS + Socket.io應用程序停止接收事件

[英]Node JS + Socket.io application stops to receive events after some time

我正在開發Node 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 Developer工具中看到正在發送的數據。 以下是正在發送的樣本數據

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條消息之后才發生。

編輯:我試圖將傳輸機制從Web套接字更改為“ xhr-polling”。 即使那樣,我也面臨着同樣的問題,相反,我可以在調試中看到一些有價值的東西。

   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應用程序。

我找到了解決問題的方法。

問題是我正在創建數據庫連接池,但是沒有使用dbConn.release();釋放連接dbConn.release();

一旦池中的連接耗盡,應用程序將繼續等待從池中獲取數據庫連接。

簡而言之,Devil參與其中。 我在問題中沒有提到的細節。 哈哈哈.. !!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM