Javascript 使用node和socket.io运行自定义函数
所以我希望能够使用node通过socket.io运行自定义函数 我的基本想法相当简单,我就是无法让它发挥作用。一般来说,您会编写类似的代码来对传入消息运行函数Javascript 使用node和socket.io运行自定义函数,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,所以我希望能够使用node通过socket.io运行自定义函数 我的基本想法相当简单,我就是无法让它发挥作用。一般来说,您会编写类似的代码来对传入消息运行函数 //server socket.on('incomingMessage', function(data) { console.log(data); io.sockets.emit('newMessage', {id: data.id, from: data.name, message: data.message}); })
//server
socket.on('incomingMessage', function(data) {
console.log(data);
io.sockets.emit('newMessage', {id: data.id, from: data.name, message: data.message});
});
//client
socket.on('newMessage', function(data) {
$('#messages').html($('#messages').html() + data.message);
$('#from').html($('#from').html() + data.from);
});
但我想做的是让它更具动态性,并实际传递我想要在消息本身中运行的函数,所以类似这样的东西
//server
socket.on('customFunction', function(data) {
console.log(data);
io.sockets.emit('runFunction', data);
})
//client
socket.on('runFunction', function(data) {
for(var index in data) {
args.push(data[index]);
}
data.fn.apply(this, args);
});
但是当我从一个客户那里打电话时,我用了
socket.emit('customFunction', {id: sessionId, name: user.name, callBack: function() { alert('it worked');
}
});
在服务器上,它只记录会话id和名称,回调(不管名称如何,我已经尝试过func、run、cb、callBack、customFunc)就消失了。所以我有点不知所措。有人有什么想法吗?提前谢谢你的帮助。我不知道为什么,但是当调用它时,它只记录会话id和name元素,回调,或fn,或其他任何东西,只是不存在。node或socket.io在发送内容时是否从参数中删除函数?您正在将数据转换为数组,然后尝试调用不再具有的属性 然后将数据应用于socket.on函数(
此
)
因此,请尝试以下方法:
socket.on('runFunction', function(data) {
var arg = [];
args.push(data.id);
args.push(data.name);
// etc...
data.callback.apply(this, args);
});
我不知道我是否理解正确,但据我所知,你有两个选择
//create a index on one side
var runtime = {
"addMessage":function(param1,param2){ alert(arguments) },
"whatEverFunction":function(){}
}
socket.on("runtime",function(data){
if(!runtime[data.fn])return alert("runtime error");
runtime[data.fn].apply(null,data.args);
}
//create a call on the other
socket.io.emit({fn:"addMessage",args:["paramAValue","paramBValue"]});
如果这对您没有帮助,您可能需要检查库“dnode”是否符合您的要求
祝你好运:)没有这样的运气。我对代码进行了修改,这样客户机就只有socket.on('runFunction',function(data){data.fn.apply(this,data);}}),但当我调用它时,服务器只记录{“id”:“-sasf9akdn”},所以fn甚至无法到达服务器。不知何故,somwehere节点或套接字正在运行它,并从正在运行的数据中删除sentconsole.log(data),然后查看我在socket.on('customFunction')中的两个服务器上都做了什么('customFunction'…函数,当使用…socket.emit调用时,它只记录“{id:”fdsicnsdev4a“}”。'customFunction',{id:sessionId,fn:function(){alert('something');});客户端也记录了同样的事情,fn不是什么坏主意,我知道eval,这就是为什么我永远不会使用它:)。这里的主要思想是纯动态编码,最终目标是在对服务器的调用中编写我想要在服务器上运行的函数。这样,我就不必真正地更新服务器上的代码来添加新功能,我可以动态地编写需要运行的函数,并将其发送到服务器上以在服务器上执行。我意识到这在很多方面都是危险的,但老实说,我不需要担心安全问题,因为它只能从内部访问,除了我,没有人会干扰它。