Javascript 捕获WebSocket异常:“捕获WebSocket异常”;WebSocket握手时出错:意外响应代码:503“;
我正在尝试实现一个WebSocket连接,当我的站点关闭时,它会尝试每隔X秒重新连接自己,直到它再次联机。到目前为止,我得到了这个:Javascript 捕获WebSocket异常:“捕获WebSocket异常”;WebSocket握手时出错:意外响应代码:503“;,javascript,web,websocket,Javascript,Web,Websocket,我正在尝试实现一个WebSocket连接,当我的站点关闭时,它会尝试每隔X秒重新连接自己,直到它再次联机。到目前为止,我得到了这个: var onCloseHandler = function() { reconnect(); } function reconnect() { try { console.log('Connection lost, trying to reconnect...'); socket = new WebSocket(m
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到“”的连接失败:WebSocket握手期间出错:意外响应代码:503
而且无法捕捉它(在X秒时间内再次调用同一个函数)或使执行移到下一行。它只是崩溃,通过浏览器的控制台显示异常,并停止执行
是否有任何方法可以捕获此异常
提前谢谢
编辑:为了清楚起见,
onclose
事件不会被第二次调用,我已经检查过了。此外,例外情况(因此,当站点离线时无法连接)也可以;我正在寻找一种方法来检测它,并将执行驱动到catch
块的setTimeout
。我最终使用了以下方法:
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,确信它不会在服务器再次启动时抛出异常
不完全是我希望找到的,但至少它起作用了。是否调用了
onErrorHandler
?另外,您是否确定新WebSocket()
确实引发了异常(而不是记录错误)?尝试在构造函数之后添加一个console.log
,以验证执行是否已停止。@levi否,未调用onErrorHandler
。另外,如果我在构造函数之后添加一个console.log
,则不会显示它(在显示构造函数之前的那一个)。