En la aplicación web, intento volver a conectarme a un servidor websocket si el canal se desconecta:
let ws = null; let connected = false; const extractHostname = function (url) { let hostname; if (url.indexOf("://") > -1) hostname = url.split("/")[2]; else hostname = url.split("/")[0]; hostname = hostname.split(":")[0]; hostname = hostname.split("?")[0]; return hostname; }; const composeWsAddress = function (address) { let scheme = "ws"; if (document.location.protocol === "https:") scheme += "s"; return scheme + "://" + address + ":8000/ws"; }; const open = function (address) { console.log("connecting..."); ws = new WebSocket(address); ws.onopen = onOpen; ws.onclose = onClose; ws.onmessage = onMessage; ws.onerror = onError; }; const close = function () { if (ws) ws.close(); connected = false; }; var onOpen = function() { connected = true; console.log("connected!"); }; var onClose = function() { ws = null; console.log("connection closed!"); setTimeout(reconnect, 3000); }; var onMessage = function(event) { }; var onError = function(event) { ws = null; console.log("connection error!"); setTimeout(reconnect, 3000); }; WebSocketClient = { init: function() { } }; function reconnect() { const address = composeWsAddress(extractHostname(location.href)); open(address); } $(function() { WebSocketClient.init(); reconnect(); });Para probarlo sigo este procedimiento:
pero el servidor ahora dice que hay muchos clientes conectados: uno para cada intento fallido.
Aquí aprendo que no hay necesidad en javascript de "eliminar" un objeto creado con la new palabra clave. Así que no estoy seguro de dónde está mi error.