chushihua
This commit is contained in:
+46
@@ -0,0 +1,46 @@
|
||||
'use strict';
|
||||
|
||||
var SockJS = require('sockjs-client/dist/sockjs');
|
||||
|
||||
var retries = 0;
|
||||
var sock = null;
|
||||
|
||||
var socket = function initSocket(url, handlers) {
|
||||
sock = new SockJS(url);
|
||||
|
||||
sock.onopen = function onopen() {
|
||||
retries = 0;
|
||||
};
|
||||
|
||||
sock.onclose = function onclose() {
|
||||
if (retries === 0) {
|
||||
handlers.close();
|
||||
}
|
||||
|
||||
// Try to reconnect.
|
||||
sock = null;
|
||||
|
||||
// After 10 retries stop trying, to prevent logspam.
|
||||
if (retries <= 10) {
|
||||
// Exponentially increase timeout to reconnect.
|
||||
// Respectfully copied from the package `got`.
|
||||
// eslint-disable-next-line no-mixed-operators, no-restricted-properties
|
||||
var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100;
|
||||
retries += 1;
|
||||
|
||||
setTimeout(function () {
|
||||
socket(url, handlers);
|
||||
}, retryInMs);
|
||||
}
|
||||
};
|
||||
|
||||
sock.onmessage = function onmessage(e) {
|
||||
// This assumes that all data sent via the websocket is JSON.
|
||||
var msg = JSON.parse(e.data);
|
||||
if (handlers[msg.type]) {
|
||||
handlers[msg.type](msg.data);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
module.exports = socket;
|
||||
Reference in New Issue
Block a user