socket.io:客户端将所有传入消息接收到单个函数中
Posted
技术标签:
【中文标题】socket.io:客户端将所有传入消息接收到单个函数中【英文标题】:socket.io: client receive all incoming messages into a single function 【发布时间】:2015-01-07 16:00:35 【问题描述】:我正在使用 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))
;
【问题讨论】:
我认为它是重复的。见***.com/questions/10405070/…。解决方案:覆盖socket.on
和socket.emit
。
@creeper $emit 在 1.2.0 中不可用;在那个页面中,他们给出的结果都是 0.9...
【参考方案1】:
这不是一个完美的解决方案,但它工作正常......
代码更改服务器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 更改为(browser javascript to node.js app);
node_modules/socket.io/node_modules/socket.io-client/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)
);
require('socket.io-client') 的代码更改(node.js 应用到 node.js 应用);
/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) );
【讨论】:
以上是关于socket.io:客户端将所有传入消息接收到单个函数中的主要内容,如果未能解决你的问题,请参考以下文章
Android 客户端未从 node.js 服务器接收到 socket.io 消息
将 socket.io 添加到现有的 Express 项目(前面有 React)