Tengo una aplicación con código dividido (cliente/servidor). En el lado del cliente, me gustaría que socket io intente varias URL (una a la vez) hasta que se conecte correctamente.
Aquí está mi código:
const BAD_HOST = "http://localhost:8081"; const LOCAL_HOST = "http://localhost:8080"; const SOCKET_CONFIG = { upgrade: false, transports: ["websocket"], auth: { ... }, // Trimmed for brevity extraHeaders: { ... }, // Trimmed for brevity }; let socket = io(BAD_HOST, SOCKET_CONFIG); // This connects fine when I use LOCAL_HOST socket.on("connect_error", (err) => { console.log(err); socket = io(LOCAL_HOST, SOCKET_CONFIG); // DOES NOT WORK }); socket.on("connect", () => { ... } // Trimmed for brevity En resumen, cuando trato de reasignar el valor de socket a una nueva conexión io, parece conservar la antigua conexión fallida. Mi navegador continúa arrojando mensajes 'connect_error' desde la URL incorrecta: la WebSocket connection to 'ws://localhost:8081/socket.io/?EIO=4&transport=websocket' failed:
Revisé pero no pude encontrar ninguna documentación oficial sobre esta pregunta.
Creo que ya se ha discutido un enfoque aquí: https://stackoverflow.com/a/22722710/656708
Esencialmente, tiene una matriz de URL, que en su caso sería:
const socketServerURLs = ["http://localhost:8081","http://localhost:8080"];y luego itera sobre ellos, tratando de iniciar una conexión de socket, como esta:
// something along these lines socketServerURLs.forEach((url) => { // ... socket.connect(url, socketConfiguration, (client) => {}); // ... } Por otra parte, no sé qué implica un BAD_HOST . Suponiendo que quiere decir que una conexión a ese host falló, ¿cómo lo sabría sin intentar conectarse a él?