-
-
Save sahat/8364120 to your computer and use it in GitHub Desktop.
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'); | |
}); | |
}); |
You are not sending code, the callback will only run on the client 💃
Not sure about the code:
- You add a new handler every single time you send a ping
- If your ping time is more than 2s, you'll get rubbish (might be an issue on mobile device where latency is large or if you want to ping more often than 2s, with this implementation, you cannot ping faster than the round trip, which you don't necessarily know).
I would:
- move the socket.on before the setInterval()
- send the timestamp with the ping and change the server side to return it with the pong, and do the math upon receiving the response...
Also he didn't put a "var" before latency.
@flower1024 @steel-finger sounds like you two don't know what a callback is. very dangerous !
Can be kind enough to put an example here that isn't "very dangerous"?
@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.
Is this is milliseconds? Thanks!
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).
Hi @ForgeableSum, so how can we use Socket.io builtin ping/pong to calculate latency ? i didn't found any documentation about that.
Yes, very dangerous !