programing

'ws : // xxx : nn'에 대한 WebSocket 연결 실패 : 핸드 셰이크 응답을 받기 전에 연결이 종료 됨 '오류를 잡는 방법?

itsource 2021. 1. 16. 09:47
반응형

'ws : // xxx : nn'에 대한 WebSocket 연결 실패 : 핸드 셰이크 응답을 받기 전에 연결이 종료 됨 '오류를 잡는 방법?


port로 시작된 노드 서버가 있고 nnWebSocket 서비스가 없다고 가정 해 보겠습니다 .

문제는 내 클라이언트가 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/


연결이 성공하면 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);

the above answers cannot be correct. You want to treat it as an error. But that message is more of a warning/info that shows when the following happens.

WebSocketTransport.prototype.close = function() {
  debug('close');
  var ws = this.ws;
  this._cleanup();
  if (ws) {
    ws.close();
  }
};

correct should be:

exampleSocket.onclose = async (event) => {
        console.error(event);    
//do what you want
}

ReferenceURL : https://stackoverflow.com/questions/25779831/how-to-catch-websocket-connection-to-ws-xxxnn-failed-connection-closed-be

반응형