socket error node.js websocket socket.io

node.js - error - this socket on



Socket.io: falla: la conexión se cerró antes de recibir una respuesta de saludo (4)

Aquí está el ejemplo completo de trabajo de uno de nuestros proyectos de trabajo:

const websocket = require(''ws''); const http = require(''http''); const express = require(''express''); const app = express(); const server = http.createServer(app); wss = new websocket.Server({ server }); app.on(''upgrade'', wss.handleUpgrade); wss.on(''connection'', ws => { console.log(''web socket connection is alive''); } server.listen(8080, () => { console.log(''server started on PORT 8080''); });

traducido del medio

Socket.io para NodeJS no parece funcionar como un servidor websocket

Por alguna razón, socket.io SIEMPRE retrocede al sondeo largo y, si fuerzo la capa de transporte websocket, se producirá un error:

fallido: conexión cerrada antes de recibir una respuesta de saludo

Los puertos correctos están abiertos. Estoy usando el ejemplo de chat de socket.io. Configuré el servidor en http://jmi.io:3000 . Como puede ver, funciona bien con un hermoso canal de sondeo largo, pero ahora intente la conexión websocket desde un cliente websocket y ...

La conexión de WebSocket a ''ws: // jmi: 3000 /'' falló: la conexión se cerró antes de recibir una respuesta de saludo

Solo tengo un nodo con un único subproceso y tengo exactamente el mismo package.json que en el ejemplo de ejemplo de chat.

{ "name": "socket-chat-example", "version": "0.0.1", "description": "my first socket.io app", "dependencies": { "express": "4.3.1", "socket.io": "1.2.0" } }

Gracias por tu ayuda


En mi caso, el problema fue que estoy procesando el servidor a través browser-sync

browserSync({ //server: { // // src is included for use with sass source maps // baseDir: [''public'', ''src''] //}, proxy: "localhost:4045", port: 4046

Así que esto fallará, sin embargo en la producción funciona bien.


Ligeramente relacionado con lo que respondió @Lucas Klaassen: Tuve lo siguiente:

let express = require(''express''); let app = express(); let http = require(''http'').Server(app); let io = require(''socket.io'')(http); // this is the culprit: app.listen(port);

Cambiar la última línea es lo que lo arregló:

http.listen(port);


Tuve exactamente el mismo problema porque estaba definiendo ''io'' dos veces. Verifique dónde está definiendo io en su código y asegúrese de que no está definiendo la variable io dos veces.

Ejemplo de lo que estaba haciendo mal:

var server = require(''http'').createServer(app); var io = require(''socket.io'')(server); var io = require(''socket.io'').listen(server.listen(config.port, config.ip, function () { console.log(''Express server listening on %d, in %s mode'', config.port, app.get(''env'')); }));

Ejemplo de lo que solucionó el problema:

var server = require(''http'').createServer(app); var io = require(''socket.io'')(server); server.listen(config.port, config.ip, function () { console.log(''Express server listening on %d, in %s mode'', config.port, app.get(''env'')); });