@@ -15,8 +15,9 @@ var Tracker = require('./tracker')
1515// boost, and saves browser resources.
1616var socketPool = { }
1717
18+ var RECONNECT_MINIMUM = 15 * 1000
19+ var RECONNECT_MAXIMUM = 30 * 60 * 1000
1820var RECONNECT_VARIANCE = 30 * 1000
19- var RECONNECT_MINIMUM = 5 * 1000
2021var OFFER_TIMEOUT = 50 * 1000
2122
2223inherits ( WebSocketTracker , Tracker )
@@ -29,6 +30,7 @@ function WebSocketTracker (client, announceUrl, opts) {
2930 self . peers = { } // peers (offer id -> peer)
3031 self . socket = null
3132 self . reconnecting = false
33+ self . retries = 0
3234
3335 self . _openSocket ( )
3436}
@@ -134,6 +136,7 @@ WebSocketTracker.prototype._onSocketConnect = function () {
134136
135137 if ( self . reconnecting ) {
136138 self . reconnecting = false
139+ self . retries = 0
137140 self . announce ( self . client . _defaultAnnounceOpts ( ) )
138141 }
139142}
@@ -285,10 +288,11 @@ WebSocketTracker.prototype._onSocketError = function (err) {
285288
286289WebSocketTracker . prototype . _startReconnectTimer = function ( ) {
287290 var self = this
288- var ms = Math . floor ( Math . random ( ) * RECONNECT_VARIANCE ) + RECONNECT_MINIMUM
291+ var ms = Math . floor ( Math . random ( ) * RECONNECT_VARIANCE ) + Math . min ( Math . pow ( 2 , self . retries ) * RECONNECT_MINIMUM , RECONNECT_MAXIMUM )
289292
290293 self . reconnecting = true
291294 var reconnectTimer = setTimeout ( function ( ) {
295+ self . retries ++
292296 self . _openSocket ( )
293297 } , ms )
294298 if ( reconnectTimer . unref ) reconnectTimer . unref ( )
0 commit comments