2012-01-25 13 views
10

クライアントから入って来るすべてのメッセージを1つのハンドラで処理できるようにしたい。Socket.io:サーバー上のすべての着信メッセージを処理するにはどうすればよいですか?

例のクライアントコード:

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

例サーバコード:

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

私は、そのニュースに送られた場合でも、すべてのメッセージをログに記録できるようにしたいチャットまたは任意の他の名前使用したいです放出する。これは可能ですか?

注:上記のサーバーコードは機能しません。現在ログに記録されているものはありません。私はすべてのメッセージのためにすべてのemit名のために処理できる単一のイベントがあるかどうか疑問に思っています。

+0

多分これ=> http://stackoverflow.com/a/7491506/11926? – Alfred

+0

ソリューションについてはこちらを参照してください:http://stackoverflow.com/a/9674248/362536 – Brad

答えて

1

これはSocket.IOを持つopen issueです。

本当に必要な場合は、おそらくSocket.IOをフォークする必要があります。方法は3rd-Edens commentを参照してください。

+1

まあ、これは間違いなく私が望んでいた答えではありません。 – Joshua

+0

私はどちらも、それは現在の状況です。一方、3rd Edensのコメントからの変更はわずか3〜5行であり、実装するには十分に簡単でなければなりません。 – mtsr

6

ソケットをオーバーライドすることで可能です。$発する機能

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

受信メッセージに対して機能していると機能名から示唆されているので、これは着信メッセージに対して機能しますか? – mtsr

+0

クライアント側でうまく動作しますが、サーバー側ではテストされません –

関連する問題