socket.on (‘conexión’ … evento nunca activado nodejs + express + socket.io

Problema socket.io NO funciona

Detalles

  • Generé un proyecto con express [folder]; cd [folder]; npm install; express [folder]; cd [folder]; npm install;
  • Configurar socket.io npm install socket.io
  • Ejecutar la aplicación de nodo con el código de abajo
  • El evento de conexión del cliente se activa pero la conexión del servidor NUNCA se activa.

Preparar

  • Servidor AWS Free Tier, Ubuntu 11.10, ami-a7f539ce
  • nodejs v0.6.5
  • expreso v2.5.1
  • socket.io v0.8.7

Cliente

  var socket = io.connect('http://example.com:3000'); socket.on('connect', function() { console.log('connected'); }); socket.on('message', function(msg){ console.log(msg); }); socket.on('disconnect', function() { console.log('disconnected'); }); socket.on('error', function (e) { console.log('System', e ? e : 'A unknown error occurred'); }); 

Servidor

  [...] app.listen(3000); // socket.io setup var socket = require('socket.io').listen(app); // socket.io connection establishment socket.on('connection', function (client) { client.send("hello"); console.log("hello", client); }); 

¿Por qué nunca se dispara el evento de conexión ?

Tomó un tiempo para notar … el evento de connection se emite en io.sockets . En tu código esto sería

 socket.sockets.on('connection', function (client) { client.send("hello") console.log("hello", client) }) 

Debe usar io lugar de socket como nombre var para evitar esta confusión.

Ricardo Tomasi tiene razón, me salvó la vida, me estaba volviendo loco.

Si bien las cosas han cambiado, estamos en 2013, todavía hay un problema abierto (desde hace 2 años) en este

Probablemente algo cambió, de todos modos para registrar el evento ‘conectar’ tuve que hacer esto:

 var openSocket = function (uniqueID) { var appSocket = io.connect('/'+uniqueID, { transports: ['websocket', 'xhr-polling']}); appSocket.socket.on('connect', function () { console.log('i did connect.'); }); return appSocket; }; 

Lo siguiente hizo un truco para mí con: socket.io-client: “^ 0.9.16”

 io.connect("http://localhost:4000", {'force new connection': true}); 

Ahora, el evento “conectar” se dispara de manera constante y no se puede reutilizar.

Descubrí esta opción al examinar la línea socket.io-client / lib / io.js: 192 Como no puedo encontrar este archivo io.js en github, creo que hay refactorización en futuras versiones, y esta opción podría no trabajo.

Al menos, esto podría ser útil para alguien que se ocupará de este trabajo temporal.