如何发送一个事件,并用socket.io作为parameter passing一个函数

我正在使用socket.io,我想从我的服务器发出一个事件,并传递一个函数作为参数的对象。 这是我的代码:

socket.emit('customEvent', { name : "Test". myFunc : function() { //some logic here } }); 

然后在客户端(我的应用程序在浏览器中),我可以访问“名称”属性,但是当我尝试访问“myFunc”,但我得到“未定义”。 这是我的代码

 socket.on('customEvent', function(data){ data.myFunc(); }); 

什么是正确的方法(如果有可能的话)?

数据以JSON传输,因此不能包含函数。 也许你正在寻找socket.io文档中所谓的“确认”

 // server socket.on('customEvent', function (data, fn) { fn(data.x) }) // client socket.emit('customEvent', { x: 1 }, function(){ // ... }) 

你可以序列化你的函数,也许这对于某些函数是危险的。 但是socket.io只将string作为纯string或JSON进行传输。 从服务器端收到string函数时可以尝试使用。

注意:代码未经testing如下:

 function hello() { return "Hello Cruel World"; } socket.emit('send-function', { myFunc : hello.toString() }); 

在服务器端:

 socket.on('send-function', data) { console.log(eval(data.myFunc)); } 

尝试这个代码,并给我们一个反馈,如果它的工作。