Socket.io:如何处理服务器上的所有传入消息?

Jos*_*hua 11 node.js socket.io

我希望能够处理从单个处理程序中的客户端进入的所有消息.

示例客户端代码:

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

示例服务器代码:

io.sockets.on('connection', function (socket) {
socket.on('message', function (data) {
    console.log(data);
}); });
Run Code Online (Sandbox Code Playgroud)

我希望能够记录每条消息,即使它是使用emit发送的新闻,聊天或其他任何名称.这可能吗?

注意:上述服务器代码不起作用.目前没有任何记录.我只是想知道是否有一个事件可以处理每个发射名称的所有消息.

Gan*_*mar 6

这可以通过覆盖socket.$ emit函数来实现

//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));       
};
Run Code Online (Sandbox Code Playgroud)


mts*_*tsr 0

这是 Socket.IO 的一个未决问题

这个时候,如果你真的需要它,你可能就得fork Socket.IO了。请参阅3rd-Edens 评论了解如何操作。

  • 嗯,这绝对不是我所希望的答案。 (2认同)