Comment attraper la connexion `WebSocket à ‘ws: // xxx: nn’ échoué: Connexion fermée avant de recevoir une erreur de réponse de handshake`?

Disons que j’ai un serveur de nœud démarré avec le port nn , et qu’il n’y a aucun service WebSocket dessus.

Et le problème est que mon client essaie de connecter un service WebSocket à ce serveur.

De toute évidence, il ne devrait pas se connecter au serveur.

mais je ne pouvais pas attraper cette erreur, mon code client comme suit:

 try { this.ws = new WebSocket('ws://xxx:nn'); } catch ( e ) { fallback(); console.warn(e); } 

Je m’attends à ce que la méthode de fallback soit appelée en cas d’échec de la connexion, mais en fait, l’erreur que je peux obtenir en try...catch ci-dessus, try...catch

Est-ce que quelqu’un sait comment attraper l’erreur dans mon casse?

En regardant la spécification HTML5 WebSockets, vous pouvez transmettre une valeur à la méthode close (). Ensuite, sur l’écouteur d’événement onclose (), vous pouvez vérifier cette valeur. Cela vous donne la possibilité de définir des gestionnaires pour différents scénarios de déconnexion, puis de gérer tout le rest en tant qu’erreur générique.

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(); 

violon doux: https://jsfiddle.net/lamarant/ry0ty52n/

Vous pouvez vous inscrire au rappel onError de l’object websocket

 exampleSocket.onerror=function(event){ console.log("Error"); } 

Vous pouvez vous référer à l’exemple suivant. http://jsfiddle.net/g28yuymv/1/

exemple d’erreur de capture http://jsfiddle.net/g28yuymv/4/

La propriété readyState est définie sur 1 lorsque la connexion est réussie; elle peut donc être utilisée pour déterminer l’état de la connexion, la connexion de socket prend généralement moins d’une seconde, nous pouvons donc prendre 3 secondes d’intervalle et vérifier l’état de la connexion.

Voici le code

  this.ws = new WebSocket('ws://xxx:nn'); setTimeout(function () { if (this.ws.readyState != 1) { alert("Problem connection , kindly contact system admin ."); } }, 3000);