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.onsocket.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 没有发送给所有客户端

python socket.io客户端无法接收广播消息

将 socket.io 添加到现有的 Express 项目(前面有 React)

如何将 socket.io 挂载到 fastapi 应用程序并向所有连接的客户端发送广播

Kubernetes 中的 Socket.IO 集群,多个节点未发送给所有客户端