Domanda

Ecco il mio problema:

Ho il server A, eseguendo node.js e utilizzando socket.io per comunicare con i client (browser Web). Tutto questo funziona bene e dandy.

Tuttavia, ora che ho il server B, che deve anche connettermi al server A tramite WebSocket, ho colpito un muro. Nessuno dei client WebSocket Node.js che ho trovato non funzionerà con Socket.io sul server A.

Quindi, questo è il caso per cui sto cercando:

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

Client-Server Una connessione viene eseguita tramite Socket.io

Ora, il server B (in esecuzione node.js) dovrebbe connettersi al server A tramite WebSocket (per passare attraverso la porta 80). Ma...

Anche il codice di esempio nel modulo socket.io-client non funziona ...:/

// 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.');
});

Il codice passa senza errori e l'esecuzione termina dopo pochi secondi.

Aggiornamento: campioni di codice

Il server (che funziona bene) sembra questo:

// 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.');
    });
});

Il cliente sembra così

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 e 3 stampano bene, nessun errore e pochi secondi dopo il processo esce

Inoltre, il server A non emette nulla al registro, anche se ho la registrazione Socket.io impostata su "tutto".

È stato utile?

Soluzione

Si scopre che stavo usando vecchi esempi, per qualche motivo, anche se li ho controllati. Bene, doh.

Inoltre, si è scoperto che Socket.io-client è rotto sull'ultimo nodo (6.xx). Sono riuscito a trovare un aggiornamento da GitHub per questo, ha sostituito i file e Yay, tutto funziona!

Modificare: Sfortunatamente non ho salvato alcun link agli esempi di lavoro, ma dopo aver rapidamente sfogliato il codice sembra che le uniche modifiche fossero al codice client, che ora sembra così:

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');

Altri suggerimenti

Per le persone future:
Ecco 2 molto semplice Node.js app che usano Socket.io Per connettersi, inviare e ricevere messaggi l'uno tra loro.

Il pacchetto richiesto è:

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 + "'");
    });
});

Ecco uno snippet di codice che ho scritto, sta usando Socket.io 1.0.6 e Socket.IO-Client 1.0.6. Il caso è il seguente:

Server A (Socket.io Client) <---> server B (Socket.io Server)

Server B (server):

// 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.');
  });
});

Server A (client):

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');

Se sto usando LocalHost: 8080 solo sul server client non si connette.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top