46

サーバーが Socket.IO を使用して別のサーバーに接続し、クライアントのように扱うことは可能ですか?

ルームに参加させ、io.sockets.in('lobby').emit() を受け取ります。もっと?

最初のサーバーも接続/メッセージをリッスンしています。

Brad さん、参照用に私の完全な .js アプリを以下に示します。

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

3 に答える 3

55

そのとおり。サーバー アプリケーションで Socket.IO クライアントを直接使用するだけです。

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

でインストールできますnpm install socket.io-client。次に使用します:

var socket = io.connect('http://example.com');
socket.on('connect', function () {
  // socket connected
  socket.emit('server custom event', { my: 'data' });
});
于 2013-01-02T07:02:07.877 に答える
18

これは古い投稿だと思いますが、似たようなことに取り組んでいたので、考えさせられたので、戻ってきて何かを貢献することにしました。

基本的なクライアント -> サーバー 1 -> サーバー 2 のセットアップは次のとおりです。

サーバー #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://example.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
    });
});

そして、これがサーバー#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 don't know, what we should do with this
    });
});

これは、元のメッセージを送信するクライアントです。

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

気が向いたら誰かがこれを改善できるように、この投稿をコミュニティ Wiki にしています。

コードはテストされていません。自己責任で使用してください。

于 2014-07-09T15:03:21.287 に答える