Pregunta

Aquí está mi problema:

Tengo el servidor A, ejecutando Node.js y usando Socket.io para comunicarse con 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 presionado una pared. Ninguno de los clientes de Node.js WebSocket que he encontrado no funcionará con Socket.io en el servidor A.

Entonces, este es el caso por el que estoy luchando:

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

Cliente-servidor Una conexión se realiza a través de Socket.io

Ahora, el servidor B (en ejecución 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 ejecución termina después de unos segundos.

Actualización: muestras 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 se imprimen bien, sin errores, y unos segundos después, el proceso solo sale

Además, el servidor A no genera nada al registro, a pesar de que tengo el registro Socket.io configurado en "Todo".

¿Fue útil?

Solución

Resulta que estaba usando ejemplos antiguos, por alguna razón, a pesar de que los revisé triplicando. Bueno, doh.

Además, resultó que el Socket.io-Client está roto en el último nodo (6.xx). Se las arregló para encontrar una actualización de GitHub para ello, reemplazó los archivos y Yay, ¡todo está funcionando!

Editar: Desafortunadamente, no guardé ningún enlace para ejemplos de trabajo, pero después de romperme rápidamente a través del 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');

Otros consejos

Para las personas futuras:
Aquí hay 2 muy simples Node.js aplicaciones 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 + "'");
    });
});

Aquí hay un fragmento de código que escribí, está usando Socket.io 1.0.6 y Socket.io-Client 1.0.6. El caso es el siguiente:

Servidor A (Socket.io Client) <---> Server 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 del cliente no se conecta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top