edit : Socket.io a maintenant un support intégré.
Lorsque j'utilisais socket.io, la déconnexion ne se produisait pas (seulement lorsque je fermais le serveur manuellement). Mais vous pourriez simplement vous reconnecter après, par exemple, 10 secondes en cas d'échec ou autre sur l'événement de déconnexion.
socket.on('disconnect', function(){
// reconnect
});
Je suis arrivé à l'implémentation suivante :
javascript côté client
var connected = false;
const RETRY_INTERVAL = 10000;
var timeout;
socket.on('connect', function() {
connected = true;
clearTimeout(timeout);
socket.send({'subscribe': 'schaftenaar'});
content.html("<b>Connected to server.</b>");
});
socket.on('disconnect', function() {
connected = false;
console.log('disconnected');
content.html("<b>Disconnected! Trying to automatically to reconnect in " +
RETRY_INTERVAL/1000 + " seconds.</b>");
retryConnectOnFailure(RETRY_INTERVAL);
});
var retryConnectOnFailure = function(retryInMilliseconds) {
setTimeout(function() {
if (!connected) {
$.get('/ping', function(data) {
connected = true;
window.location.href = unescape(window.location.pathname);
});
retryConnectOnFailure(retryInMilliseconds);
}
}, retryInMilliseconds);
}
// start connection
socket.connect();
retryConnectOnFailure(RETRY_INTERVAL);
côté serveur (node.js) :
// express route to ping server.
app.get('/ping', function(req, res) {
res.send('pong');
});