2013-01-02 23 views
26

È possibile che un server si connetta a un altro utilizzando Socket.IO e venga considerato come un client?Socket IO Server to Server

E farlo unire camere, ricevere io.sockets.in ('lobby'). Emit(). E altro ancora?

Anche il primo server sta ascoltando per connessioni/messaggi.

Hey Brad, ecco il mio js piena applicazione sotto per riferimento:

var io = require("socket.io").listen(8099); 
io.set('log level', 1); 

io.sockets.on("connection", function (socket) { 

    console.log('A Client has Connected to this Server'); 

    //Let Everyone Know I just Joined 
    socket.broadcast.to('lobby').emit("message",'UC,' + socket.id); // Send to everyone in Room but NOT me 


socket.on("message", function (data) { 

//Missing code 
socket2.send('message,' + data); //Forward Message to Second Server 

}); 

socket.on("disconnect", function (data) { 
    //Send Notification to Second Server 
    //Need to figure out later 

    //Send Notification to Everyone 
    socket.broadcast.emit("message",'UD,' + socket.id); //Send to Everyone but NOT me 

    //Remove user from Session ID 
    arSessionIDs.removeByValue(socket.id);  

    //Send Notification to Console 
    console.log("disconnecting " + arRoster[socket.id][1]); 
}); 

}); 

var io_client = require('socket.io-client'); 
var socket2 = io_client.connect('http://192.168.0.104:8090'); 
socket2.on('connect', function() { 
socket2.emit('C3434M,Test'); 
}); 
+0

Eventuali duplicati di [cliente Node.js per un server socket.io] (https://stackoverflow.com/questions/10703513/node-js-client-for-a-socket-io-server) – StefansArya

risposta

35

Sì, assolutamente. Basta usare direttamente il client Socket.IO nell'applicazione server.

https://github.com/LearnBoost/socket.io-client

È possibile installarlo con npm install socket.io-client. Quindi da utilizzare:

var socket = io.connect('http://example.com'); 
socket.on('connect', function() { 
    // socket connected 
    socket.emit('server custom event', { my: 'data' }); 
}); 
+0

Hey Brad, sarebbe possibile ricevere un messaggio socket.on ('message'), e quindi inoltrare quel messaggio al secondo server usando Socket IO? Grazie, -T – Taurian

+0

Sì, è possibile utilizzare il client Socket.IO lato server nello stesso modo in cui lo si utilizza sul lato client. Puoi fare quello che vuoi con i messaggi. – Brad

+0

Ok bene, ho installato la mia app, facile da copiare/incollare ed eseguire. Potete aiutarmi a riempire gli spazi vuoti? Come entra in gioco la connessione al secondo server? Grazie, -T – Taurian

14

Mi rendo conto che questo è un vecchio post, ma stavo lavorando su qualcosa di simile e ho deciso di tornare e contribuire in qualche modo, come mi ha fatto pensare ..

Ecco un client di base - > Server 1 -> Server 2 impostazione

Server # 1

// Server 1 
var io = require("socket.io").listen(8099); // This is the Server for SERVER 1 
var other_server = require("socket.io-client")('http://domain.com:8100'); // This is a client connecting to the SERVER 2 

other_server.on("connect",function(){ 
    other_server.on('message',function(data){ 
     // We received a message from Server 2 
     // We are going to forward/broadcast that message to the "Lobby" room 
     io.to('lobby').emit('message',data); 
    }); 
}); 

io.sockets.on("connection",function(socket){ 
    // Display a connected message 
    console.log("User-Client Connected!"); 

    // Lets force this connection into the lobby room. 
    socket.join('lobby'); 

    // Some roster/user management logic to track them 
    // This would be upto you to add :) 

    // When we receive a message... 
    socket.on("message",function(data){ 
     // We need to just forward this message to our other guy 
     // We are literally just forwarding the whole data packet 
     other_server.emit("message",data); 
    }); 

    socket.on("disconnect",function(data){ 
     // We need to notify Server 2 that the client has disconnected 
     other_server.emit("message","UD,"+socket.id); 

     // Other logic you may or may not want 
     // Your other disconnect code here 
    }); 
}); 

Ed ecco Server # 2

// Server 2 
var io = require("socket.io").listen(8100); 
io.sockets.on("connection",function(socket){ 
    // Display a connected message 
    console.log("Server-Client Connected!"); 

    // When we receive a message... 
    socket.on("message",function(data){ 
     // We got a message... I dunno what we should do with this... 
    }); 
}); 

Questo è il nostro cliente, che invia il messaggio originale.

Sto rendendo questo post un Wiki di comunità in modo che qualcuno possa migliorare questo se ne ha voglia.

!! IL CODICE NON E 'STATO TESTATO, UTILIZZATO A TUO RISCHIO!

+0

Bellissimo uomo! Questo mi ha permesso di fare un missile su una configurazione di cluster socket.io. Grazie mille. –

+0

Davvero mi ha aiutato, grazie! – FirstLegion