2013-01-01 26 views
6

Czy można połączyć się z serwerem NodeJS z innego serwera? Dwa serwery NodeJS komunikujące się ze sobą?Węzeł Połączenie serwera z serwerem

//Server Code 
var io = require('socket.io').listen(8090); 

io.sockets.on('connection', function (socket) { 
io.sockets.emit('this', { will: 'be received by everyone'}); 

socket.on('private message', function (from, msg) { 
    console.log('I received a private message by ', from, ' saying ', msg); 
}); 

socket.on('disconnect', function() { 
    io.sockets.emit('user disconnected'); 
    }); 
}); 

//Client Code in Server Code. Connecting to another server. 
io.connect("http://192.168.0.104:8091"); //Connect to another server from this one. 

//ETC... 
+0

Czy próbowałeś? Skonfiguruj dwa skrypty na węźle działające na oddzielnych portach ... –

+0

Otrzymuję komunikat "Nie ma metody" connect "". Nie podoba mu się ostatnia linia. – Taurian

+0

Oczywiście, że tak, ale nie użyłbym do tego socket.io. Po prostu użyj modułu 'net'. – mekwall

Odpowiedz

11

Oto prosty przykład, który tworzy serwer i klienta, który łączy się z tym serwerem. Pamiętaj, że to, co wysyłasz, musi być buforem (łańcuchy są automatycznie konwertowane na bufory). Klient i serwer działają niezależnie od siebie, dlatego można je umieścić w tej samej aplikacji lub na zupełnie innych komputerach.

Server (server.js):

const net = require("net"); 

// Create a simple server 
var server = net.createServer(function (conn) { 
    console.log("Server: Client connected"); 

    // If connection is closed 
    conn.on("end", function() { 
     console.log('Server: Client disconnected'); 
     // Close the server 
     server.close(); 
     // End the process 
     process.exit(0); 
    }); 

    // Handle data from client 
    conn.on("data", function(data) { 
     data = JSON.parse(data); 
     console.log("Response from client: %s", data.response); 
    }); 

    // Let's response with a hello message 
    conn.write(
     JSON.stringify(
      { response: "Hey there client!" } 
     ) 
    ); 
}); 

// Listen for connections 
server.listen(61337, "localhost", function() { 
    console.log("Server: Listening"); 
}); 

klienckie (client.js):

const net = require("net"); 

// Create a socket (client) that connects to the server 
var socket = new net.Socket(); 
socket.connect(61337, "localhost", function() { 
    console.log("Client: Connected to server"); 
}); 

// Let's handle the data we get from the server 
socket.on("data", function (data) { 
    data = JSON.parse(data); 
    console.log("Response from server: %s", data.response); 
    // Respond back 
    socket.write(JSON.stringify({ response: "Hey there server!" })); 
    // Close the connection 
    socket.end(); 
}); 

W connsocket i oba obiekty implementować interfejs Stream.

+0

Hej Marcus, to jest niesamowite. Przy wielu połączonych serwerach, czy można zrobić coś takiego? socket.broadcast.emit ("wiadomość", "Hello to all Connected Servers") – Taurian

+0

Not out-of-the-box. To jest bardzo prosty przykład i musisz zaimplementować resztę interfejsu API samodzielnie. Zacznij od dodania kodu, aby śledzić wszystkich podłączonych klientów, a następnie dodaj polecenie rozgłaszania, które mogą wywoływać klienci. Czy mogę zapytać, po co to budujesz? – mekwall

+0

Potrzebuję, aby serwery przyłączyły się do pokoju. Przykład: io.sockets.in ("lobby"). Emit(). Zasadniczo próbuję uzyskać kilka serwerów do wspólnej pracy jako klienci. Ale zachowaj wiele funkcji, jakie mają "typowi" klienci. Takich jak pokoje dynamiczne i więcej. – Taurian

0

Sprawdź Substrack's dnode. Automatycznie mapuje obiekty dosłowne od 1 do 2. Zyskujesz rodzaj RPC po wyjęciu z pudełka. I działa również w przeglądarce ...

Powiązane problemy