2013-02-09 69 views
1

我正在使用socket.io,并试图从我的服务器发出一个事件,并将一个具有函数的对象作为参数传递给它。这里是我的代码:如何发送一个事件并将一个函数作为参数传递给socket.io

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

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

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

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

回答

3

数据以JSON形式传输,因此它不能包含函数。也许你正在寻找socket.io's documentation中所谓的'确认'?

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

// client 
socket.emit('customEvent', { x: 1 }, function(){ 
    // ... 
}) 
0

你可以序列化你的函数,也许这对某些函数是危险的。但是socket.io只将字符串转换为纯字符串或JSON。从服务器端收到字符串函数时,您可以尝试对其进行评估。

注意:代码不低于测试:

function hello() { 
    return "Hello Cruel World"; 
} 

socket.emit('send-function', { myFunc : hello.toString() }); 

...

在服务器端:

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

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

相关问题