Skip to content

Instantly share code, notes, and snippets.

@sahat
Last active February 23, 2022 17:09
Show Gist options
  • Save sahat/8364120 to your computer and use it in GitHub Desktop.
Save sahat/8364120 to your computer and use it in GitHub Desktop.
Calculate client-server latency using socket.io
var socket = io.connect('http://localhost');
var startTime;
setInterval(function() {
startTime = Date.now();
socket.emit('ping');
}, 2000);
socket.on('pong', function() {
latency = Date.now() - startTime;
console.log(latency);
});
io.sockets.on('connection', function (socket) {
socket.on('ping', function() {
socket.emit('pong');
});
});
@NewCompte
Copy link

Also he didn't put a "var" before latency.

@ColonelBundy
Copy link

@flower1024 @steel-finger sounds like you two don't know what a callback is. very dangerous !

@johnpattison
Copy link

Can be kind enough to put an example here that isn't "very dangerous"?

@danneu
Copy link

danneu commented Dec 13, 2015

@jpattisoninc Foxhunt's example isn't dangerous.

// Client

socket.emit('latency', Date.now(), function(startTime) {
    var latency = Date.now() - startTime;
    console.log(latency);
});

// Server

socket.on('latency', function (startTime, cb) {
  cb(startTime);
}); 

While it looks magical that the server can "call" cb(), calling cb() on the server really just sends a message back to the client telling it to execute its callback with some given arguments.

It's more clear if you try console.log(cb.toString()) on the server.

@tcaer
Copy link

tcaer commented May 10, 2017

Is this is milliseconds? Thanks!

@ForgeableSum
Copy link

ping and pong events are already used by socket.io for heartbeats so it is not advisable to create custom ping/pong events (name them something different). socket.io will send ping/pong messages (heartbeats) automatically and you can control the frequency with the connection options object (I believe default is 20 sec).

@aRandomKiwi
Copy link

Hi @ForgeableSum, so how can we use Socket.io builtin ping/pong to calculate latency ? i didn't found any documentation about that.

@NeXTs
Copy link

NeXTs commented Sep 25, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment