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; }