He estado tratando de configurar un servidor wss usando nodejs y encontré un problema al intentar conectarme usando Chrome. El problema aún ocurre con todas las extensiones deshabilitadas y en una ventana de incógnito, así que lo descarté como el problema.
Cuando intento conectarme usando Chrome, aparece el error:
WebSocket connection to 'wss://www.domain-name.com/' failed:sin ninguna razón dada. En el servidor, se llama inmediatamente a socket.on('close') con la descripción "Conexión interrumpida por un par remoto". El evento de cierre tiene wasClean = false. Este error no ocurre cuando se conecta desde Safari y Firefox, por lo que no estoy muy seguro de dónde buscar para ver qué lo está causando. Se ejecuta en AWS Lightsail y a través de un servidor proxy Apache.
El código del cliente:
var socket = new WebSocket("wss://www.domain-name.com", 'JSON') socket.onopen = function (event) { console.log('open'); socket.send('socket opened')}; socket.onclose = function (event) { console.log(event)}; socket.onmessage = function(message) { console.log('receiving message from server...')};Y el código del servidor:
const WebSocketServer = require('websocket').server; app = express() var server = app.listen(3000, () => { console.log('Server started'); }); app.use(express.static('public')); var wsServer = new WebSocketServer({ httpServer: server }); wsServer.on('request', function(request){ console.log('New connection'); var connection = request.accept(null, request.origin); connection.send('welcome from server...'); connection.on('message', function(message){ console.log(message)}; connection.on('close', function(reasonCode, description) { console.log('disconnecting', reasonCode, description); }); });También recibí el mismo error antes de cambiar a un servidor WebSocket seguro. Cualquier ayuda sería apreciada, me he quedado sin lugares para buscar y formas de tratar de obtener más información para ayudar a determinar cuál es el problema.
EDITAR: parece funcionar en Chrome en mi teléfono, pero no en Chrome en el teléfono de mis amigos.
El problema era no especificar el protocolo al aceptar la conexión. Después de aproximadamente 20 horas trabajando en el mismo error e implementando un certificado SSL para que funcione, cambié:
request.accept(null, request.origin);a:
request.accept('json', request.origin);Por alguna razón, Chrome da un mensaje de error realmente inútil. Microsoft edge ocurre el mismo error, pero da un mensaje de error mucho más útil para que pueda averiguar qué estaba pasando.