node.js socket.io

¿Cómo conectar dos servidores node.js con websockets?



socket.io (3)

Aquí está mi problema:

Tengo el servidor A, ejecutando node.js y utilizando socket.io para comunicarme con los clientes (navegadores web). Todo esto está funcionando bien y elegante.

Sin embargo, ahora que tengo el servidor B, que también necesita conectarse al servidor A a través de websockets, he golpeado una pared. Ninguno de los clientes websocket de node.js que he encontrado no funciona con socket.io en el servidor A.

Por lo tanto, este es el caso que me esfuerzo por:

.--------. .----------. .----------. | CLIENT | <--> | SERVER A | <--> | SERVER B | ''--------'' ''----------'' ''----------''

La conexión cliente-servidor A se realiza a través de socket.io

Ahora, el servidor B (que ejecuta node.js) debe conectarse al servidor A a través de websocket (para pasar por el puerto 80). Pero...

Incluso el código de ejemplo en el módulo socket.io-client no funciona ...: /

// Connect to server var socket = new io.Socket(''localhost'', {port: 8080}); socket.connect(); // Add a connect listener socket.on(''connect'', function(socket) { console.log(''Connected.''); });

El código simplemente pasa sin ningún error y la ejecución termina después de unos segundos.

Actualización: ejemplos de código

El servidor (que funciona bien) se ve así:

// Load requirements var http = require(''http''), io = require(''socket.io''); // Create server & socket var server = http.createServer(function(req, res){ // Send HTML headers and message res.writeHead(404, {''Content-Type'': ''text/html''}); res.end(''<h1>Aw, snap! 404</h1>''); }); server.listen(8080); io = io.listen(server); // Add a connect listener io.sockets.on(''connection'', function(socket) { console.log(''Client connected.''); // Disconnect listener socket.on(''disconnect'', function() { console.log(''Client disconnected.''); }); });

El cliente se ve así

console.log(''1''); // Connect to server var io = require(''socket.io-client'') var socket = new io.Socket(''localhost'', {port: 8080}); socket.connect(); console.log(''2''); // Add a connect listener socket.on(''connect'', function(socket) { console.log(''Connected!''); }); console.log(''3'');

1, 2 y 3 imprimen muy bien, sin errores, y unos segundos más tarde, el proceso acaba de salir

Además, el servidor A no envía nada al registro, a pesar de que tengo el registro de socket.io configurado en "todo".


Aquí hay un fragmento de código que escribí, que usa socket.io 1.0.6 y socket.io-client 1.0.6. El caso es el siguiente:

Servidor A (cliente Socket.io) <---> Servidor B (servidor Socket.io)

Servidor B (Servidor):

// Load requirements var http = require(''http''), io = require(''socket.io''); // Create server & socket var server = http.createServer(function(req, res) { // Send HTML headers and message res.writeHead(404, {''Content-Type'': ''text/html''}); res.end(''<h1>Aw, snap! 404</h1>''); }); server.listen(8080); io = io.listen(server); // Add a connect listener io.sockets.on(''connection'', function(socket) { console.log(''Client connected.''); // Disconnect listener socket.on(''disconnect'', function() { console.log(''Client disconnected.''); }); });

Servidor A (Cliente):

console.log(''1''); // Connect to server var io = require(''socket.io-client''); var socket = io.connect(''http://localhost:8080'', {reconnect: true}); console.log(''2''); // Add a connect listener socket.on(''connect'', function(socket) { console.log(''Connected!''); }); console.log(''3'');

Si estoy usando localhost: 8080 solo en el servidor cliente no se conecta.


Resulta que estaba usando ejemplos antiguos, por alguna razón, a pesar de que los he comprobado tres veces. Bien doh

Además, resultó que el socket.io-client está roto en el último nodo (6.xx). Logré encontrar una actualización de github para eso, reemplazó los archivos y yay, ¡todo está funcionando!

Edición : Desafortunadamente, no guardé ningún enlace a ejemplos de trabajo, pero después de revisar rápidamente el código, parece que los únicos cambios fueron en el código del cliente, que ahora se ve así:

console.log(''1''); // Connect to server var io = require(''socket.io-client'') var socket = io.connect(''localhost:8080'', {reconnect: true}); console.log(''2''); // Add a connect listener socket.on(''connect'', function(socket) { console.log(''Connected!''); }); console.log(''3'');


Para las personas futuras:
Aquí hay 2 aplicaciones muy simples de Node.js que usan socket.io para conectarse, enviar y recibir mensajes entre sí.

El paquete requerido es:

npm install socket.io

Node-App-1 server.js:

var io = require(''socket.io'').listen(3000); io.on(''connection'', function (socket) { console.log(''connected:'', socket.client.id); socket.on(''serverEvent'', function (data) { console.log(''new message from client:'', data); }); setInterval(function () { socket.emit(''clientEvent'', Math.random()); console.log(''message sent to the clients''); }, 3000); });

Node-App-2 client.js:

var io = require(''socket.io-client''); var socket = io.connect("http://localhost:3000/", { reconnection: true }); socket.on(''connect'', function () { console.log(''connected to localhost:3000''); socket.on(''clientEvent'', function (data) { console.log(''message from the server:'', data); socket.emit(''serverEvent'', "thanks server! for sending ''" + data + "''"); }); });