Frage

Hier ist mein Problem:

Ich habe einen Server A, laufe node.js und verwende Socket.io für die Kommunikation mit Clients (Webbrowser). Das alles läuft gut und Dandy.

Nachdem ich jedoch Server B habe, das auch eine Verbindung zum Server A durch WebSockets herstellen muss, habe ich eine Wand geschlagen. Keiner der Node.js WebSocket -Clients, die ich gefunden habe, funktioniert nicht mit dem Socket.io auf dem Server A.

Dies ist also der Fall, nach dem ich mich bemühe:

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

Client-Server Eine Verbindung wird über Socket.io erstellt

Jetzt sollte Server B (laufend node.js) eine Verbindung zum Server A über WebSocket herstellen (um Port 80 durchzugehen). Aber...

Sogar der Beispielcode im Socket.io-Client-Modul funktioniert nicht ...:/

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

Der Code geht nur ohne Fehler und Ausführung nach wenigen Sekunden.

Update: Code -Samples

Server (was gut funktioniert) sieht so aus:

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

Der Kunde sieht so aus

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 und 3 Drucke gut, keine Fehler und wenige Sekunden später beendet der Vorgang nur aus

Außerdem gibt Server A nichts in das Protokoll aus, obwohl ich den Socket.io -Protokollierungs -Set auf "Alles" eingestellt habe.

War es hilfreich?

Lösung

Es stellte sich heraus, dass ich aus irgendeinem Grund alte Beispiele verwendet habe, obwohl ich sie dreifach überprüft habe. Nun, Doh.

Außerdem stellte sich heraus, dass der Socket.io-Client auf dem neuesten Knoten (6.xx) unterbrochen ist. Es wurde geschafft, ein Update von Github dafür zu finden, ersetzt die Dateien und yay, alles funktioniert!

Bearbeiten: Leider habe ich keine Links zu Arbeitsbeispielen gespeichert, aber nachdem ich schnell den Code durchflogen, scheint es, dass die einzigen Änderungen am Client -Code waren, was jetzt so aussieht:

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

Andere Tipps

Für zukünftige Menschen:
Hier ist 2 sehr einfach Node.js Apps, die verwenden Socket.io Zum Verbinden, Senden und Empfangen von Nachrichten untereinander.

Erforderliches Paket ist:

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

Hier ist ein Snippet von Code, den ich geschrieben habe. Er verwendet Socket.io 1.0.6 und Socket.io-Client 1.0.6. Der Fall ist der folgende:

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

Wenn ich Localhost: 8080 nur auf dem Client -Server verwende, wird nicht eine Verbindung hergestellt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top