2010-05-18 17 views
5

Sto provando a trasmettere un messaggio tramite il servizio Node.js socket.io (http://socket.io/) a determinati sottoinsiemi di tutti i sottoscrittori. Canali in Socket.io

Per essere più precisi, mi piacerebbe utilizzare i canali a cui gli utenti possono iscriversi, al fine di spingere in modo efficiente i messaggi a un centinaio di persone allo stesso tempo.

Non sono davvero sicuro se addEvent ('channel_name', x) è la strada da percorrere.

Non ho trovato nulla nei documenti. Qualche idea?

Grazie Mat

+0

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

risposta

0

Sembra si può usare Redis pubblicazione/sottoscrizione funzionalità per questo. Vedi this link.

0

Sto iniziando la mia ricerca sullo stesso problema al momento. Socket.io ha un bell'aspetto, ma sì, penso che tu debba gestire tu stesso la lista degli abbonati. La maggior parte delle app di esempio là fuori usano solo un singolo elenco di iscritti.

sono venuto in questo ... http://faye.jcoglan.com/

Si trasforma il server in un'applicazione PubSub. Sembra che gestisca abbastanza bene le liste degli iscritti e fornisce una buona gerarchia per i canali. Tuttavia, non riesco a trovare un esempio di risposta agli eventi pubblicati all'interno della stessa app che sta eseguendo faye ?? Immagino che sia possibile. Dovrò dare un'occhiata alla fonte. Sembra dare un esempio di esecuzione di un'app nodo separata sul server che funziona come client.

L'altra funzione che sto cercando è permessi. Vorrei che solo determinati clienti potessero pubblicare su determinati canali.

+0

Come follow-up, ho usato faye come parte del http://nodeknockout.com/ e ha funzionato alla grande Sul sito Web di faye, c'è un buon esempio di come si fa un filtro per fare l'autenticazione, se necessario. Ho anche notato che connect ha un plugin middleware per fare pubsub. L'implementazione di Faye è decisamente più completa. – bxjx

4

Questo è un po 'in ritardo (!) Ma l'ho individuato nei miei registri dei referrer (sono l'autore di Faye). È facile pubblicare messaggi dalla tua applicazione, sia che si trovi nello stesso server di Faye o meno. Per esempio:

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

Se la logica applicazione è nello stesso processo server si può fare questo:

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

Altrimenti si può fare un cliente in nodo che si connette al server Faye:

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

In entrambi i casi, il server Faye trasmetterà il messaggio a tutti i client sottoscritti indipendentemente dal fatto che siano server o lato client. Spero possa aiutare.