如何发送一个事件,并用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)); }
尝试这个代码,并给我们一个反馈,如果它的工作。