2012-03-13 21 views
22

Desidero abilitare le comunicazioni p2p basate su socket tra due o più server delle applicazioni node.js diversi. Sto usando socket.io per gestire tutte le comunicazioni tra un determinato server e l'applicazione Web che serve, ma quello che sto cercando è un modo per comunicare da server a server.È possibile configurare un client socket.io in esecuzione (lato server) su un server node.js?

inizialmente avevo pensato che sarebbe così facile come qualcosa di simile a questo:

var io = require("socket.io"); 
var socket = io.connect("my remote endpoint"); 

Tuttavia, come si è visto implementazione lato server socket.io non offre un metodo di "connettersi", solo un metodo di ascolto.

Perché è questo? Perché non posso trattare un server di applicazioni nodo come client su un server socket.io in esecuzione altrove? C'è un modo per ottenere questa funzionalità?

+3

è la libreria client proprio quello che stai dopo? https://github.com/LearnBoost/socket.io-client – pimvdb

+0

Posso collegarlo a un'app node.js? Come faccio a richiedere()? È progettato per l'utilizzo basato su browser, per quanto ne so. – Myk

+0

Vedere questo s/o filetto: http://stackoverflow.com/questions/6785979/socket-io-client-issues-require-socket-io-client-js-not-working – Myk

risposta

51

OK, quindi grazie ai @pimvdb nei commenti sopra ho una soluzione praticabile.

In sostanza, la libreria socket.io che NPM installa ha una dipendenza da un altro modulo, chiamato socket.io-client. In un'installazione standard di socket.io questo sarà installato in node_modules/socket.io/node_modules/socket.io-client

Tuttavia, è anche possibile dire "NPM installare socket.io-client" e installarlo come il suo possedere una biblioteca cittadina di prima classe.

Poi vostro utilizzo è simile al seguente:

var client = require("socket.io-client"); 
client.connect("http://myendpoint.com:3000/whatever"); 
client.emit("test", "foo"); 

e tutto funziona.

Così, grazie uomo!

+7

+1 per pubblicare la soluzione trovata – pimvdb

+9

'var client = require (" socket.io-client "); var socket = client.connect ("http: // localhost: 3000"); Presa .emit ("test", "foo"); ' Questo ha funzionato per me. – nullbuilt

2

Prima di andare a tutta velocità su socket.io per le comunicazioni server-server ..... socket.io è progettato come browser per l'infrastruttura di comunicazione del server. Sono tutt'altro che sicuro che sia la soluzione migliore per i server P2P. Inoltre, se lo fai da server a server - perché non fare solo Websockets? Esistono vari moduli websocket per il nodo, ad es. https://github.com/einaros/ws

+1

Capisco tutto questo. La situazione è che ho un'applicazione web basata su socket.io con la comunicazione del nodo <-> già stabilita e l'intera API costruita. Volevo essere in grado di avviare un'istanza locale di node.js e collegarlo a un Arduino, quindi collegarlo come un altro elemento nella sessione socket.io esistente. Ha senso? – Myk

+0

Certo, sembra interessante. In bocca al lupo. – Mark

6

Solo per chiarezza, questo è un esempio con gli ascoltatori e possibilità di emettere eventi (e senza installare di nuovo un modulo già installato)

var io = require('socket.io/node_modules/socket.io-client'); 

client = io.connect('http://'+CONFIG.host+':'+CONFIG.port); 

client.on('connect',function() { 
    client.emit("test","foo"); 
}); 
+0

Dato che sono nuovo ai socket. Per quanto riguarda la gestione di questa richiesta se in client.emit ("test", "foo") "foo" è un flusso e test è un blob, qualcosa come questo client.emit ("blob", stream) per essere più chiaro sto cercando script lato server (server.js) e l'impostazione del portale per l'aiuto all'ascolto !!? –

Problemi correlati