2012-01-25 10 views
10

Chcę móc obsłużyć wszystkie wiadomości przychodzące od klientów w jednym module obsługi.Socket.io: Jak obsłużyć wszystkie wiadomości przychodzące na serwerze?

Przykład kodu klienta:

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

kod Przykład server:

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

Chciałbym być w stanie zalogować każdą wiadomość, nawet jeśli jego wysłana na wiadomościach, czat lub cokolwiek innego imienia przy użyciu emitować. czy to możliwe?

Uwaga: Powyższy kod serwera nie działa. Obecnie nic nie jest rejestrowane. Zastanawiam się tylko, czy istnieje jedno zdarzenie, które można obsłużyć dla wszystkich komunikatów dla każdego emitowanego nazwiska.

+0

Może to => http://stackoverflow.com/a/7491506/11926? – Alfred

+0

Zobacz tutaj rozwiązanie: http://stackoverflow.com/a/9674248/362536 – Brad

Odpowiedz

1

To jest open issue z Socket.IO.

W tym momencie, jeśli naprawdę tego potrzebujesz, prawdopodobnie będziesz musiał rozwidlić Socket.IO. Zobacz, jak to zrobić: 3rd-Edens comment.

+1

To zdecydowanie nie jest odpowiedź, na którą liczyłem. – Joshua

+0

Ja też nie, ale to jest obecna sytuacja. Z drugiej strony zmiany z komentarza 3rd-Edens są tylko 3-5 liniami i powinny być łatwe do wdrożenia. – mtsr

6

Jest to możliwe poprzez nadpisanie gniazdo. $ Emitują funkcja

//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

Czy to działa na wiadomości przychodzące, ponieważ z nazwy funkcji wynika, że ​​jest to funkcja dla wiadomości wychodzących? – mtsr

+0

działa dobrze po stronie klienta, ale bez testów po stronie serwera –

Powiązane problemy