1

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

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

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

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

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

4

2 回答 2

4

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

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

// client
socket.emit('customEvent', { x: 1 }, function(){
    // ...
})
于 2013-02-09T23:28:22.797 回答
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));
} 

试试这个代码,如果它有效,请给我们反馈。

于 2013-02-09T23:43:54.267 回答