人
我想用socket.io向浏览器发送一个函数,但没能做到。
在服务器端,我使用emit
响应一个函数,但我在浏览器上得到了一个未定义的内容。
有没有办法通过socketio从服务器获取功能?
有我的代码。
// server.js
var static = require('node-static');
var http = require('http');
var file = new(static.Server)();
var app = http.createServer(function(req, res) {
file.serve(req, res);
}).listen(8000);
io = require('socket.io').listen(app);
io.sockets.on('connection', function(socket) {
socket.on('schedule', function() {
console.log('SCHEDULE TASK');
socket.emit('schedule', function() { console.log('hello world'); });
});
});
// client.js
var socket = io.connect('http://localhost:8000');
socket.on('schedule', function(fn) {
fn();
});
socket.emit('schedule');
答案 0 :(得分:3)
您无法发送实际功能。您可以发送一串Javascript然后将其转换为客户端中的函数。
但是,我建议你真的应该重新考虑一下你在这里尝试做什么。通常,客户端已经拥有它所需的代码(来自它下载的脚本标记),然后发送客户端数据,然后将其传递给已有的代码或用于决定已有的代码的数据。打电话。
如果您向我们展示了您尝试解决的现实问题,我们可能会建议一个比向客户端发送一串Javascript代码更好的解决方案。
如果你真的想发送一个函数,你必须先把它变成一个字符串,然后发送字符串,然后使用字符串通过Function
对象将它变回客户端的函数或eval()
或使用内联源创建自己的动态脚本标记。
答案 1 :(得分:1)
您只能通过socket.io
发送字符串,而不是函数。话虽这么说,我建议你改为发送函数名。
//server.js
socket.emit('schedule', 'helloworld');
//client.js
function helloworld(){
console.log('hello world');
}
socket.on('schedule',function(name){
window[name](); //hello world
});