2012-01-25 17 views
10

Voglio essere in grado di gestire tutti i messaggi che arrivano dai client in un singolo gestore.Socket.io: come gestisco tutti i messaggi in arrivo sul server?

Esempio codice client:

var socket = io.connect('http://localhost'); 
socket.emit('news', { hello: 'test' }); 
socket.emit('chat', { hello: 'test' }); 

codice server Esempio:

io.sockets.on('connection', function (socket) { 
socket.on('message', function (data) { 
    console.log(data); 
}); }); 

Mi piacerebbe essere in grado di accedere ogni messaggio, anche se il suo mandato sulle notizie, chat o qualsiasi altro nome utilizzando emettere. È possibile?

Nota: il codice server sopra riportato non funziona. Al momento non è registrato nulla. Mi sto solo chiedendo se c'è un singolo evento che può essere gestito per tutti i messaggi per ogni nome di emissione.

+0

Forse questo => http://stackoverflow.com/a/7491506/11926? – Alfred

+0

Vedi qui per una soluzione: http://stackoverflow.com/a/9674248/362536 – Brad

risposta

1

Questo è un open issue con Socket.IO.

In questo momento, se davvero ne hai bisogno, probabilmente dovrai fork Socket.IO. Vedi 3rd-Edens comment per come farlo.

+1

Beh, questa sicuramente non è la risposta che speravo. – Joshua

+0

Neanche io, ma questa è la situazione attuale. D'altra parte, le modifiche apportate al commento di 3rd-Edens sono solo di 3-5 righe e dovrebbero essere abbastanza facili da implementare. – mtsr

6

Questo è possibile mediante l'override presa. $ Emettono funzione

//Original func 
var x = socket.$emit; 

socket.$emit = function(){ 
    var event = arguments[0]; 
    var feed = arguments[1]; 

    //Log 
    console.log(event + ":" + feed); 

    //To pass listener 
    x.apply(this, Array.prototype.slice.call(arguments));  
}; 
+0

Funziona sui messaggi in arrivo, perché dal nome della funzione suggerisce che è una funzione per i messaggi in uscita? – mtsr

+0

funziona bene sul lato client, ma non ci sono test sul lato server –

Problemi correlati