Question

Voici mon problème:

Je serveur A, en cours d'exécution en utilisant Node.js et socket.io pour communiquer avec les clients (navigateurs Web). Tout cela fonctionne très bien et dandy.

Cependant, maintenant que j'ai le serveur B, qui doit également se connecter au serveur A à websockets, je l'ai frappé un mur. Aucun des clients WebSocket Node.js que j'ai trouvé ne fonctionnera pas avec le socket.io sur le serveur A.

Alors, c'est le cas, je me efforce pour:

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

connexion client-serveur A est fait par socket.io

Maintenant, le serveur B (en cours d'exécution Node.js) doit se connecter au serveur A via websocket (pour passer par le port 80). Mais ...

Même l'exemple de code dans le module socket.io client ne fonctionne pas ...: /

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

Le code passe juste sans erreur et se termine d'exécution après quelques secondes.

Mise à jour: Les exemples de code

ressemble à ce serveur (qui fonctionne très bien):

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

ressemble client comme celui-ci

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 et 3 imprime très bien, pas d'erreurs, et quelques secondes plus tard, le processus juste sorties

En outre, le serveur A ne sort pas quoi que ce soit dans le journal, même si je l'ensemble de l'exploitation forestière socket.io sur « tout ».

Était-ce utile?

La solution

Il se trouve que j'utilisais des exemples anciens, pour une raison quelconque, même si je les ai vérifiés triple. Eh bien, doh.

En outre, il est avéré que le socket.io-client est cassé sur le dernier nœud (6.x.x). Réussi à trouver une mise à jour github pour elle, a remplacé les fichiers et youpi, tout fonctionne!

Modifier : Malheureusement, je ne l'ai pas sauver des liens vers des exemples de travail, mais après l'écrémage rapidement à travers le code, il semble que les seuls changements étaient au code client, qui ressemble maintenant à ceci:

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

Autres conseils

Pour les futurs gens: Voici 2 applications Node.js très simples que l'utilisation socket.io pour se connecter, envoyer et recevoir des messages entre eux.

Requis est:

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

Voici un extrait de code que j'ai écrit, il utilise socket.io 1.0.6 et socket.io client 1.0.6. Le cas est le suivant:

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

Serveur B (serveur):

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

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

Si j'utilise localhost:. 8080 uniquement sur le serveur de client, il ne se connecte pas

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top