Manu
Manu

Reputation: 901

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

I am working on a Node JS + socket.io application.

The entire application works fine, but after about 5 mins the server stops to receive the events that the client triggers. :(

When the events are not triggered, I can see that the server is successfully receiving the heart beat.

   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

I am also sure that the client is emitting the messages because, I can see the data being sent in the chrome Developer tools. Following is the sample data that is being sent

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

Also, I have checked the results of TCP Dump at the server machine, it is successfully receiving the data packets.

Node version is v0.10.21 socket.io version is 0.9.16

Client Code

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" } );
}

Server Code

    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 );
}

Edit: To be more precise this thing happens only after around receiving 7-8 messages and emitting 7-8 messages.

Edit: I tried to change the transport mechanism from Web Socket to "xhr-polling". Even then I am facing same problem, instead that I can see something worth in the debug.

   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

This clearly shows that data has reached the Node JS application.

Upvotes: 2

Views: 2025

Answers (1)

Manu
Manu

Reputation: 901

I found the solution to my problem..

Problem was that I was creating a database connection pool, but I was not releasing the connections using dbConn.release();

Once the connections in the pool were exhausted the application kept on waiting for the database connection to be fetched from the pool.

In short, Devil was in the details. The details I had not mention in my question. hahaha..!!

Upvotes: 0

Related Questions