2012-01-25 87 views
10

我希望能夠處理來自單個處理程序中客戶端的所有消息。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); 
}); }); 

我希望能夠登錄,即使它的消息發送的每一個消息,聊天或任何使用其它名稱發射。這可能嗎?

注意:上述服務器代碼不起作用。目前沒有任何記錄。我只是想知道是否有一個事件可以爲每個發射名稱的所有消息處理。

+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

其在客戶端的工作很好,但在服務器端沒有測試 –

相關問題