websockets usar servidor seguridad definicion cuando javascript websocket

javascript - usar - Cómo detectar la conexión `WebSocket a ''ws:// xxx: nn'' fallida: ¿La conexión se cerró antes de recibir un error de respuesta de saludo?



websocket api (3)

Digamos que tengo un servidor de nodo iniciado con el puerto nn , y no hay ningún servicio WebSocket en él.

Y el problema es que mi cliente intenta conectar un servicio WebSocket a este servidor.

Obviamente, debería fallar al conectarse al servidor.

pero no pude detectar este error, mi código de cliente como sigue:

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

Mi expectativa es que se llame al método fallback cuando la conexión falló, pero en realidad, el error de que pueda ser capturado por el try...catch anterior try...catch

¿Alguien sabe cómo detectar el error en mi caso de uso?


La propiedad readyState se establece en 1 cuando la conexión es exitosa, por lo tanto, se puede usar para determinar el estado de la conexión, la conexión del socket generalmente toma <1 seg, por lo que podemos tomar un espacio de seguridad de 3 segundos y luego verificar el estado de conexión.

Siguiente es el codigo

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



Si observa la especificación de HTML5 WebSockets, puede pasar un valor al método close (). Luego, en el detector de eventos onclose () puede verificar ese valor. Esto le da la oportunidad de configurar manejadores para diferentes escenarios de desconexión y luego manejar todo lo demás como un error genérico.

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

dulce violín: https://jsfiddle.net/lamarant/ry0ty52n/