diff --git a/lib/client/websocket-tracker.js b/lib/client/websocket-tracker.js index 83b6239..ddb5e29 100644 --- a/lib/client/websocket-tracker.js +++ b/lib/client/websocket-tracker.js @@ -15,8 +15,9 @@ var Tracker = require('./tracker') // boost, and saves browser resources. var socketPool = {} +var RECONNECT_MINIMUM = 15 * 1000 +var RECONNECT_MAXIMUM = 30 * 60 * 1000 var RECONNECT_VARIANCE = 30 * 1000 -var RECONNECT_MINIMUM = 5 * 1000 var OFFER_TIMEOUT = 50 * 1000 inherits(WebSocketTracker, Tracker) @@ -29,6 +30,7 @@ function WebSocketTracker (client, announceUrl, opts) { self.peers = {} // peers (offer id -> peer) self.socket = null self.reconnecting = false + self.retries = 0 self._openSocket() } @@ -134,6 +136,7 @@ WebSocketTracker.prototype._onSocketConnect = function () { if (self.reconnecting) { self.reconnecting = false + self.retries = 0 self.announce(self.client._defaultAnnounceOpts()) } } @@ -285,10 +288,11 @@ WebSocketTracker.prototype._onSocketError = function (err) { WebSocketTracker.prototype._startReconnectTimer = function () { var self = this - var ms = Math.floor(Math.random() * RECONNECT_VARIANCE) + RECONNECT_MINIMUM + var ms = Math.floor(Math.random() * RECONNECT_VARIANCE) + Math.min(Math.pow(2, self.retries) * RECONNECT_MINIMUM, RECONNECT_MAXIMUM) self.reconnecting = true var reconnectTimer = setTimeout(function () { + self.retries++ self._openSocket() }, ms) if (reconnectTimer.unref) reconnectTimer.unref()