2013-01-01 17 views
6

È possibile connettersi a un server NodeJS da un altro server? Due server NodeJS che comunicano tra loro?Nodo Connessione JS da server a server

//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

Hai provato? Configura due script di nodi in esecuzione su porte separate ... –

+0

Ottengo "Nessun metodo 'connetti'". Non gli piace l'ultima riga lì. – Taurian

+0

Certo che lo è, ma non userei socket.io per quello. Basta usare il modulo 'net'. – mekwall

risposta

11

Ecco un semplice esempio che crea un server e un client che si connette a quel server. Ricorda che ciò che invii deve essere un buffer (le stringhe vengono convertite automaticamente in buffer). Il client e il server funzionano indipendentemente l'uno dall'altro, quindi possono essere inseriti nella stessa app o su computer completamente diversi.

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

client (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(); 
}); 

I conn e socket oggetti sia implementa l'interfaccia Stream.

+0

Ehi Marcus, è fantastico. Con più server connessi, è possibile fare qualcosa di simile? socket.broadcast.emit ("message", "Hello to all Connected Servers") – Taurian

+0

Non immediatamente pronto all'uso. Questo è un esempio molto semplice e devi implementare il resto dell'API. Inizia aggiungendo il codice per tenere traccia di tutti i client connessi, quindi aggiungi un comando broadcast che i tuoi clienti possano chiamare. Posso chiederti per cosa stai costruendo questo? – mekwall

+0

Avrei bisogno di far entrare i server in una stanza. Esempio: io.sockets.in ('lobby'). Emit(). Fondamentalmente, sto cercando di far funzionare più server come client. Ma conserva molte delle funzionalità tipiche dei client "tipici". Ad esempio stanze dinamiche e altro ancora. – Taurian

0

Controllare Substrack's dnode. Auto mappa gli oggetti letterali dal 1 ° env al 2 °. Ottieni una sorta di RPC fuori dalla scatola. E funziona anche nel browser ...