如何捕获"WebSocket 连接到'ws://xxx:nn'失败:连接在收到握手响应之前关闭"错误?



假设我有一个以端口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);

相关内容

  • 没有找到相关文章

最新更新