1. setInterval вообще не нужен
2. this.socket = new WebSocket - на этой строке в строгом режиме будет ошибка (this === undefined), а в нестрогом (почему его нет?) создаст socket в глобальном объекте (что плохо)
3. После создания соединения, события нужно снова навесить
У меня лично вот так вот все организовано:
const url = `${location.protocol === 'http:' ? 'ws:' : 'wss:'}//${location.host}/`;
var socket;
var connected = false;
typeof WebSocket !== 'undefined' && function connect() {
socket = new WebSocket(url);
socket.onmessage = onMessage;
socket.onopen = () => connected = true;
socket.onerror = err => {
console.error(err);
socket.onclose = null;
connected = false;
socket.close();
connect();
};
socket.onclose = event => {
console.info(`WebSocket closed with code ${event.code}! ${event.reason}`);
connected = false;
if(event.wasClean) return;
connect();
};
}();
function onMessage(event) {
//...
}