我正在使用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))
}
};
答案 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) { });