套接字io,"connect_error"后尝试多个URL建立连接



我有一个应用程序分割代码(客户端/服务器)。在客户端,我希望socket io尝试多个url(一次一个),直到它连接成功。

下面是我的代码:

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

简而言之,当我尝试将socket的值重新分配给一个新的io连接时,它似乎保留了旧的,失败的连接。我的浏览器继续从错误的url抛出'connect_error'消息:WebSocket connection to 'ws://localhost:8081/socket.io/?EIO=4&transport=websocket' failed:

我查过了,但找不到任何关于这个问题的官方文件。

我认为这里已经讨论了一种方法:https://stackoverflow.com/a/22722710/656708

本质上你有一个url数组,在你的例子中是:

const socketServerURLs = ["http://localhost:8081","http://localhost:8080"];

,然后遍历它们,尝试启动套接字连接,如下所示:

// something along these lines
socketServerURLs.forEach((url) => { 
// ...
socket.connect(url, socketConfiguration, (client) => {});
// ...
}

然后,我不知道BAD_HOST意味着什么。假设您的意思是与该主机的连接失败了,如果不实际尝试连接,您怎么知道呢?