如何使用socket.io发出事件并将函数作为参数传递

时间:2013-02-09 23:22:42

标签: node.js socket.io

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

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

然后在客户端(我的浏览器中的应用程序)我可以访问'name'属性,但是当我尝试访问'myFunc'但我得到'undefined'时。这是我的代码

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

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

您可以序列化您的功能,也许这对某些功能来说是危险的。但是socket.io只将字符串作为纯字符串或JSON传输。从服务器端接收时,您可以尝试使用eval字符串函数。

注意:以下未测试的代码:

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

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

...

在服务器端:

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

尝试使用此代码,如果有效,请向我们提供反馈。

相关问题