socket.io:客户端将所有传入的消息接收到单个函数中

时间:2014-11-11 06:51:53

标签: node.js socket.io

我正在使用socket.io 1.2.0。在客户端浏览器中,如何在单个侦听器中接收所有事件

socket.on("*",fuction(event,data){ 

});

我从0.9上传后,之前的实施工作无效。

我以前的黑客接收所有活动

     var original_$emit = getSocket().$emit;

        getSocket().$emit = function () {
            var args = Array.prototype.slice.call(arguments);
            original_$emit.apply(getSocket(), ["*"].concat(args));
            if (!original_$emit.apply(getSocket(), arguments)) {
                original_$emit.apply(getSocket(), ["default"].concat(args))
            }
        };

1 个答案:

答案 0 :(得分:0)

这不是一个完美的解决方案,但它的工作正常......

代码更改服务器socket.io

/node_modules/socket.io/lib/socket.js

在行号:128

 if (~exports.events.indexOf(ev)) {
    emit.apply(this, arguments);
 }

更改为

if (~exports.events.indexOf(ev)) {
   var arg = ["*",arguments];
   emit.apply(this, arg);
}

在行号:328

emit.apply(this, args);

更改为

args.splice(0, 0, "*");
emit.apply(this, args);

示例:

 var io = require('socket.io')(SERVER);
     io.on('connection', function (socket) {
         socket.on('*', function (event, data) {
         });
    });

代码更改socket.io for(浏览器javascript到node.js app );

node_modules / socket.io / node_modules / socket.io的客户端/ socket.io.js

在第724行中

emit.apply(this, arg);

更改为

var arg = ["*",ev];
emit.apply(this, arg);

在第847行

 if (this.connected) {
     emit.apply(this, args);
 }

更改为

 if (this.connected) {
    args.splice(0, 0, "*");
    emit.apply(this, args);
 }

var arg = ["*",ev];

示例:

var socket = io();
socket.on("*", function (event, data) {
});

需要的代码更改(' socket.io-client ')(node.js app到node.js app);

/node_modules/socket.io-client/lib/socket.js

在行号:129

emit.apply(this, arguments);

更改为

var arg = ["*",ev];
emit.apply(this, arg);

在行号:253

 if (this.connected) {
     emit.apply(this, args);
 }

更改为

 if (this.connected) {
    args.splice(0, 0, "*");
    emit.apply(this, args);
 }

var arg = ["*",ev];

示例:

var io = require('socket.io-client');
var socket = io(URL,{});
socket.on("*", function (event, data) { });