Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Configure heartbeat timeout, heartbeat intervl and close timeout on server

I have a node.js server and I am using socket.io for realtime communication between the server and clients. I have observed that if a mobile client (Using Ionic Framework) disconnects suddenly, without letting the server know about it, the sockets are alive for hours (or forever). I have read and looked on their documentation and they have options like pingInterval, pingtimeout, heartbeat interval, heartbeat timeout, close timeout.

How do I configure these values on my server?

Which of these values have been deprecated?

Here is my code.

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
io.set('heartbeat interval', 5000); 
io.set('heartbeat timeout', 8000);
io.set('timeout', 5000);
io.on('connection', function(socket){...}

None of these seem to work. Any help or guidance is highly appreciated.

PS: I am splicing sockets of my collection when a client disconnects and it works just fine when clients tell server that they want to disconnect gracefully.

like image 822
Samarth Agarwal Avatar asked Jul 09 '15 16:07

Samarth Agarwal


People also ask

How do I change my heart timeout?

heartbeat. timeout property and enter the heartbeat timeout in seconds for the value. To add the property as a server default, navigate to: Configure > Server Defaults > Advanced instead. Once you have entered the property and value, click + to add followed by Save Changes.

What is a heartbeat timeout?

The heartbeat timeout value defines after what period of time the peer TCP connection should be considered unreachable (down) by RabbitMQ and client libraries. This value is negotiated between the client and RabbitMQ server at the time of connection. The client must be configured to request heartbeats.

What is TCP heartbeat?

A heartbeat is a type of a communication packet that is sent between nodes. Heartbeats are used to monitor the health of the nodes, networks and network interfaces, and to prevent cluster partitioning.

What is default heartbeat interval?

The default heartbeat interval is ten seconds.


1 Answers

You have to use pingTimeout as mentioned here: https://github.com/Automattic/socket.io/issues/1900

Also make sure to set your options like the following, since io.set is gone.

var io = require('socket.io')({ pingTimeout: 5000 })

More at: http://socket.io/docs/migrating-from-0-9/#configuration-differences

However, if this doesn't work, chances are ionic is actually keeping the connection in the background. From a project around a year ago, I remember having multiple issues like this and ended up making ionic disconnect socket forcefully when it went in the background.

like image 56
Rahat Mahbub Avatar answered Oct 26 '22 00:10

Rahat Mahbub