web-dev-qa-db-fra.com

Prise IO Serveur à serveur

Est-il possible pour un serveur de se connecter à un autre à l'aide de Socket.IO et d'être traité comme un client?

Et faites-le rejoindre les salles, recevez io.sockets.in ('lobby'). Emit (). Et plus?

Le premier serveur est également à l’écoute des connexions/messages.

Hey Brad, voici mon application complète .js ci-dessous pour référence: 

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');
});
33
Taurian

Oui absolument. Utilisez simplement le client Socket.IO dans votre application serveur directement.

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

Vous pouvez l'installer avec npm install socket.io-client. Puis utiliser:

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

Je réalise que ceci est un ancien post, mais je travaillais sur quelque chose de similaire et j'ai décidé de revenir et de contribuer quelque chose comme ça me faisait réfléchir ..

Voici un client de base -> Serveur 1 -> Serveur 2

Serveur n ° 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
    });
});

Et voici le serveur n ° 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...
    });
});

Ceci est notre client, qui envoie le message original.

// Client
var socket = io('http://localhost');
socket.on('connect', function(){
    socket.emit("message","This is my message");

    socket.on('message',function(data){
        console.log("We got a message: ",data);
    });
});

Je fais de ce message un wiki de la communauté afin que quelqu'un puisse améliorer cela s'il le souhaite.

!! LE CODE N'A PAS ÉTÉ TESTÉ, UTILISEZ AT VOTRE PROPRE RISQUE !!

16
Destreyf

J'ai eu le même problème, mais au lieu d'utiliser socket.io-client, j'ai décidé d'utiliser une approche plus simple (du moins pour moi) en utilisant redis pub/sub, le résultat est assez simple.

Vous pouvez consulter ma solution ici: https://github.com/alissonperez/scalable-socket-io-server

Avec cette solution, vous pouvez avoir le nombre de processus/serveurs que vous souhaitez (en utilisant une solution de dimensionnement automatique). Vous utilisez simplement redis comme moyen de transférer vos messages entre vos serveurs.

0
Alisson R. Perez