gpt4 book ai didi

javascript - 捕获WebSocket异常: "Error during WebSocket handshake: Unexpected response code: 503"

转载 作者:行者123 更新时间:2023-12-03 07:31:04 28 4
gpt4 key购买 nike

我正在尝试实现一个 WebSocket 连接,当我的网站关闭时,它会尝试每 X 秒重新连接一次,直到它再次重新上线。到目前为止我已经得到了这个:

var onCloseHandler = function() {
reconnect();
}

function reconnect() {
try {
console.log('Connection lost, trying to reconnect...');
socket = new WebSocket(myUrl);

socket.onerror = onErrorHandler;
socket.onmessage = onMessageHandler;
socket.onopen = onOpenHandler;
socket.onclose = onCloseHandler;
} catch (err) {
setTimeout(function() {
reconnect();
}, 1000);
}
}

我的问题是,当 onCloseHandler第一次被调用(即当我的网站突然离线时),new WebSocket()调用抛出下一个异常:

WebSocket connection to '<here_goes_my_url>' failed: Error during WebSocket handshake: Unexpected response code: 503

并且没有办法捕获它(在 X 秒内再次调用相同的函数)或使执行移至下一行。它只是崩溃,通过浏览器控制台显示异常,并停止执行。

有什么办法可以捕获这个异常吗?

提前致谢。

编辑:为了明确起见,onclose事件不会被第二次调用,我已经检查过了。此外,异常(exception)情况(因此站点离线时无法连接)也没有问题;我正在寻找的是一种检测它并将执行驱动到 setTimeout 的方法在catch block 。

最佳答案

我最终使用了这种方法:

function reconnect() {
console.log('Connection lost, trying to reconnect...');
$.ajax({
url: dummy_http_url_on_the_same_server
success: function() {
//Server is back online
socket = new WebSocket(myUrl);
socket.onerror = onErrorHandler;
socket.onmessage = onMessageHandler;
socket.onopen = onOpenHandler;
socket.onclose = onCloseHandler;
},
error: function() {
//Server is still down
setTimeout(function() {
reconnect();
}, 1000);
}
});
}

由于 Ajax 调用有一个错误处理程序,因此我使用它们每 X 秒检查一次(在本例中为每 1 秒;在我的应用程序中是一个随机数,以避免所有客户端同时连接)如果我的服务器是重新上线。当它出现时,我会实例化 websocket,并确定当服务器再次启动时它不会抛出异常。

不完全是我希望找到的,但至少它有效。

关于javascript - 捕获WebSocket异常: "Error during WebSocket handshake: Unexpected response code: 503",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32462133/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com