2010-05-18 18 views
5

Estoy tratando de transmitir un mensaje a través del servicio Node.js socket.io (http://socket.io/) a cierto subconjunto de todos los suscriptores. Canales en Socket.io

Para ser más exactos, me gustaría utilizar canales a los que los usuarios se puedan suscribir, con el fin de enviar mensajes de manera eficiente a un par de cientos de personas al mismo tiempo.

No estoy seguro si addEvent ('channel_name', x) es el camino a seguir.

No he encontrado nada en los documentos. ¿Algunas ideas?

Gracias Mat

+0

http://stackoverflow.com/questions/4445883/ node-websocket-server-possible-to-have-multiple-separate-broadcasts-for-a-a/4446178 # 4446178 –

Respuesta

0

parece que se puede utilizar Redis publicación/suscripción de la funcionalidad de este. Ver this link.

0

Estoy comenzando mi investigación sobre el mismo problema en este momento. Socket.io se ve muy bien, pero sí, creo que tiene que administrar la lista de suscriptores usted mismo. La mayoría de las aplicaciones de ejemplo solo usan una sola lista de suscriptores.

me llegó a través de este ... http://faye.jcoglan.com/

Resulta su servidor en una aplicación pubsub. Parece que maneja bastante bien las listas de suscriptores y proporciona una buena jerarquía para los canales. Sin embargo, no puedo encontrar un ejemplo de respuesta a eventos publicados dentro de la misma aplicación que se ejecuta faye ?? Supongo que es posible. Tendré que echar un vistazo a la fuente. Parece dar un ejemplo de ejecutar una aplicación de nodo separada en el servidor que funciona como un cliente.

La otra característica que estoy buscando son los permisos. Me gustaría que solo ciertos clientes puedan publicar en ciertos canales.

+0

Como seguimiento, utilicé faye como parte del http://nodeknockout.com/ y funcionó muy bien. En el sitio web de faye, hay un buen ejemplo de cómo un filtro para hacer la autenticación, si es necesario. También noté que connect tiene un complemento de middleware para hacer pubsub. La implementación de faye es definitivamente más completa aunque. – bxjx

4

Esto es un poco tarde (!) Pero lo vi en mis registros de referencia (soy el autor de Faye). Es fácil publicar mensajes desde su aplicación, ya sea que esté en el mismo servidor que Faye o no. Por ejemplo:

var faye = require('faye'), 
    http = require('http'); 

// Set up the server 

var server = http.createServer(function(req, res) { 
    // dispatch to your app logic... 
}); 

var bayeux = new faye.NodeAdapter({mount: '/bayeux'}); 
bayeux.attach(server); 
server.listen(8000); 

Si la lógica aplicación es en el mismo proceso de servidor que puede hacer esto:

bayeux.getClient().publish('/channel', {hello: 'world'}); 

De lo contrario, puede hacer que un cliente en el nodo que se conecta a su servidor Faye:

var client = new faye.Client('http://0.0.0.0:8000/bayeux'); 
client.publish('/channel', {hello: 'world'}); 

De cualquier forma, el servidor de Faye transmitirá el mensaje a cualquier cliente suscrito, ya sea del lado del servidor o del lado del cliente. Espero que ayude.