Skip to content

Instantly share code, notes, and snippets.

@linusthe3rd
Last active June 30, 2022 15:21
Show Gist options
  • Star 48 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save linusthe3rd/9310539 to your computer and use it in GitHub Desktop.
Save linusthe3rd/9310539 to your computer and use it in GitHub Desktop.
var attempts = 1;
function createWebSocket () {
var connection = new WebSocket();
connection.onopen = function () {
// reset the tries back to 1 since we have a new connection opened.
attempts = 1;
// ...Your app's logic...
}
connection.onclose = function () {
var time = generateInterval(attempts);
setTimeout(function () {
// We've tried to reconnect so increment the attempts by 1
attempts++;
// Connection has closed so try to reconnect every 10 seconds.
createWebSocket();
}, time);
}
}
function generateInteval (k) {
var maxInterval = (Math.pow(2, k) - 1) * 1000;
if (maxInterval > 30*1000) {
maxInterval = 30*1000; // If the generated interval is more than 30 seconds, truncate it down to 30 seconds.
}
// generate the interval to a random number between 0 and the maxInterval determined from above
return Math.random() * maxInterval;
}
@ds0nt
Copy link

ds0nt commented Feb 27, 2015

// one liner for cool people
function generateInterval (k) {
  return Math.min(30, (Math.pow(2, k) - 1)) * 1000; 
}

@johnmaguire
Copy link

All ye' who enter: Beware the typo on line 26. generateInteval should be generateInterval.

@lap00zza
Copy link

👍

@kryhtin
Copy link

kryhtin commented Feb 14, 2017

Reconnection will happen only once, use setInterval instead setTimeout

@kenan2002
Copy link

@ds0nt
Your one-line code lack a random number generate process.

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