2012-03-13 28 views
22

Me gustaría habilitar las comunicaciones p2p basadas en sockets entre dos o más servidores de aplicaciones node.js diferentes. Estoy usando socket.io para manejar toda esa comunicación entre un servidor determinado y la aplicación web a la que sirve, pero lo que estoy buscando es una forma de comunicar servidor a servidor.¿Es posible configurar un cliente socket.io en ejecución (lado del servidor) en un servidor node.js?

había asumido inicialmente que sería tan fácil como algo parecido a esto:

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

Sin embargo, como resulta que la aplicación del lado del servidor socket.io no ofrece un método de "conectar", sólo se un método de escucha

¿Por qué es esto? ¿Por qué no puedo tratar un servidor de aplicación de nodo como un cliente a un servidor socket.io que se ejecuta en otro lugar? ¿Hay alguna manera de que pueda lograr esta funcionalidad?

+3

es la biblioteca de cliente exactamente lo que está buscando? https://github.com/LearnBoost/socket.io-client – pimvdb

+0

¿Puedo conectarlo a la aplicación node.js? ¿Cómo lo requiero()? Está diseñado para el uso basado en navegador, hasta donde yo sé. – Myk

+0

Consulte este subproceso de s/o: http://stackoverflow.com/questions/6785979/socket-io-client-issues-require-socket-io-client-js-not-working – Myk

Respuesta

51

OK, así que gracias a @pimvdb en los comentarios anteriores, tengo una solución viable.

Básicamente, la biblioteca socket.io que instala npm tiene una dependencia en otro módulo, llamado socket.io-client. En una instalación estándar de socket.io esto se instalará en node_modules/socket.io/node_modules/socket.io-client

Sin embargo, también es posible decir "npm install socket.io-client" e instalarlo como su propia biblioteca de ciudadanos de primera clase.

Luego, su uso se ve así:

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

y todo funciona.

Así que, gracias hombre!

+7

+1 para publicar la solución que encontró – pimvdb

+9

'var client = require (" socket.io-client "); var socket = client.connect ("http: // localhost: 3000"); socket.emit (emitir "prueba", "foo"); ' Esto funcionó para mí. – nullbuilt

2

Antes de ir a toda velocidad en socket.io para las comunicaciones de servidor a servidor ..... socket.io está diseñado como un navegador para la infraestructura de comunicación del servidor. Estoy seguro de que no es la mejor solución para el servidor P2P. Además, si lo hace de servidor a servidor, ¿por qué no simplemente Websockets? Hay varios módulos de websocket para nodo, p. https://github.com/einaros/ws

+1

Entiendo todo eso. La situación es que tengo una aplicación web basada en socket.io con el navegador <-> comunicación de nodo ya establecida y toda la API construida. Quería poder crear una instancia local de node.js y conectarla a un Arduino, luego conectarlo como un elemento más en la sesión existente de socket.io. ¿Tiene sentido? – Myk

+0

Claro, suena interesante. Buena suerte. – Mark

6

Sólo una aclaración, esto es un ejemplo con los oyentes y la posibilidad de emitir eventos (y sin instalar de nuevo un módulo ya instalado)

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

Como soy nuevo en sockets.What sobre el manejo de esta solicitud si en client.emit ("prueba", "foo") "foo" es una secuencia y la prueba es un blob, algo así como este client.emit ("blobs", stream) para ser más claro, estoy buscando el script del lado del servidor (server.js) y configurando el portal para escuchar la ayuda !! –

Cuestiones relacionadas