mirror of https://github.com/calzoneman/sync.git
Start working on reconnect logic
This commit is contained in:
parent
f0ba3a998a
commit
17911d43fc
|
@ -3305,6 +3305,7 @@ function backoffRetry(fn, cb, options) {
|
||||||
var jitter = options.jitter || 0;
|
var jitter = options.jitter || 0;
|
||||||
var factor = options.factor || 1;
|
var factor = options.factor || 1;
|
||||||
var isRetryable = options.isRetryable || function () { return true; };
|
var isRetryable = options.isRetryable || function () { return true; };
|
||||||
|
var maxDelay = options.maxDelay || Infinity;
|
||||||
var tries = 0;
|
var tries = 0;
|
||||||
|
|
||||||
function callback(error, result) {
|
function callback(error, result) {
|
||||||
|
@ -3316,7 +3317,10 @@ function backoffRetry(fn, cb, options) {
|
||||||
cb(error, result);
|
cb(error, result);
|
||||||
} else if (isRetryable(error)) {
|
} else if (isRetryable(error)) {
|
||||||
var offset = Math.random() * jitter;
|
var offset = Math.random() * jitter;
|
||||||
var delay = options.delay * factor + offset;
|
var delay = Math.min(
|
||||||
|
options.delay * factor,
|
||||||
|
maxDelay
|
||||||
|
) + offset;
|
||||||
console.log('Retrying on error: ' + error);
|
console.log('Retrying on error: ' + error);
|
||||||
console.log('Waiting ' + delay + ' ms before retrying');
|
console.log('Waiting ' + delay + ' ms before retrying');
|
||||||
|
|
||||||
|
|
41
www/js/ws.js
41
www/js/ws.js
|
@ -5,10 +5,11 @@
|
||||||
function WSShim(ws) {
|
function WSShim(ws) {
|
||||||
this._ws = ws;
|
this._ws = ws;
|
||||||
this._listeners = Object.create(null);
|
this._listeners = Object.create(null);
|
||||||
|
this._connected = false;
|
||||||
|
|
||||||
|
this._ws.onopen = this._onopen.bind(this);
|
||||||
this._ws.onclose = this._onclose.bind(this);
|
this._ws.onclose = this._onclose.bind(this);
|
||||||
this._ws.onmessage = this._onmessage.bind(this);
|
this._ws.onmessage = this._onmessage.bind(this);
|
||||||
this._ws.onerror = this._onerror.bind(this);
|
|
||||||
|
|
||||||
this._ackId = 0;
|
this._ackId = 0;
|
||||||
this._pendingAcks = Object.create(null);
|
this._pendingAcks = Object.create(null);
|
||||||
|
@ -51,9 +52,41 @@
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
WSShim.prototype._onopen = function _onopen() {
|
||||||
|
this._connected = true;
|
||||||
|
};
|
||||||
|
|
||||||
WSShim.prototype._onclose = function _onclose() {
|
WSShim.prototype._onclose = function _onclose() {
|
||||||
// TODO: reconnect logic
|
if (!this._connected) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this._emit('disconnect');
|
this._emit('disconnect');
|
||||||
|
|
||||||
|
if (!KICKED) {
|
||||||
|
function reconnectAsync(cb) {
|
||||||
|
initWS();
|
||||||
|
|
||||||
|
window.socket._ws.addEventListener('open', function () {
|
||||||
|
cb(null);
|
||||||
|
});
|
||||||
|
|
||||||
|
window.socket._ws.addEventListener('error', function (error) {
|
||||||
|
cb(error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var retryOpts = {
|
||||||
|
delay: 1000,
|
||||||
|
jitter: 1000,
|
||||||
|
factor: 2,
|
||||||
|
maxDelay: 20000
|
||||||
|
};
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
backoffRetry(reconnectAsync, function(){}, retryOpts);
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
WSShim.prototype._onmessage = function _onmessage(message) {
|
WSShim.prototype._onmessage = function _onmessage(message) {
|
||||||
|
@ -78,9 +111,5 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
WSShim.prototype._onerror = function _onerror() {
|
|
||||||
console.error('Dunno how to handle onerror');
|
|
||||||
};
|
|
||||||
|
|
||||||
window.WSShim = WSShim;
|
window.WSShim = WSShim;
|
||||||
})();
|
})();
|
||||||
|
|
Loading…
Reference in New Issue