假设我有一个以端口nn
启动的节点服务器,但上面没有任何WebSocket服务。
问题是我的客户端试图将WebSocket服务连接到此服务器。
显然,它应该无法连接到服务器。
但我无法捕捉到这个错误,我的客户端代码如下:
try {
this.ws = new WebSocket('ws://xxx:nn');
} catch ( e ) {
fallback();
console.warn(e);
}
我的期望是fallback
方法在连接失败时被调用,但实际上上述try...catch
没有捕捉到错误
有人知道如何在我的用例中发现错误吗?
您可以注册websocket对象的onError回调
exampleSocket.onerror=function(event){
console.log("Error");
}
您可以参考以下示例。http://jsfiddle.net/g28yuymv/1/
捕获错误示例http://jsfiddle.net/g28yuymv/4/
查看HTML5 WebSockets规范,可以将值传递到close()方法中。然后在onclose()事件侦听器上,您可以检查该值。这使您有机会为不同的断开连接场景设置处理程序,然后将其他一切作为一般错误处理。
https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#close()
var _websocket;
function wsConnect() {
if (_websocket) {
_websocket.close(3001);
} else {
_websocket = new WebSocket("wss://echo.websocket.org1");
_websocket.onopen = function() {
console.log('connected');
};
_websocket.onmessage = function(msg) {
console.log(msg);
};
_websocket.onclose = function(evt) {
if (evt.code == 3001) {
console.log('ws closed');
_websocket = null;
} else {
_websocket = null;
console.log('ws connection error');
}
};
_websocket.onerror = function(evt) {
if (_websocket.readyState == 1) {
console.log('ws normal error: ' + evt.type);
}
};
}
}
wsConnect();
甜美的小提琴:https://jsfiddle.net/lamarant/ry0ty52n/
以上答案不可能是正确的。你想把它当作一个错误。但当发生以下情况时,该消息更像是一个警告/信息。
WebSocketTransport.prototype.close = function() {
debug('close');
var ws = this.ws;
this._cleanup();
if (ws) {
ws.close();
}
};
正确的应该是:
exampleSocket.onclose = async (event) => {
console.error(event);
//do what you want
}
readyState属性在连接成功时设置为1,因此它可以用于确定连接状态,套接字连接通常采用<1秒,这样我们就可以安全地间隔3秒,然后检查连接状态。
以下是代码:
this.ws = new WebSocket('ws://xxx:nn');
setTimeout(() => {
if (this.ws.readyState !== 1) {
alert("Problem connection , kindly contact system admin .");
}
}, 3000);