我正在构建一个Web应用程序,允许用户相互竞争以解决编码挑战。我一直遇到的问题是,当用户针对诸如“ fibonacci”之类的琐碎问题提交任何种类的递归代码时,该代码在沙箱中都会超时。因此,用户无法使用递归来解决不太好的问题。
这是我目前如何使用vm2来运行用户代码以及附带的测试的示例。
[8/31/2018 9:35:58 PM] A ScriptHost error has occurred
[8/31/2018 9:35:58 PM] System.Private.CoreLib: No parameterless constructor defined for this object.
[8/31/2018 9:35:58 PM] Stopping Host
我不明白为什么普通的javascript可以正常执行,但是当在“ vm.run”中调用递归函数时,它最终会超时。
我的猜测是调用堆栈可能无法正常运行,因为我打算在“运行”功能中使用它?
作为参考,此特殊挑战的JSON数据如下所示:
const {VM} = require('vm2');
const vm = new VM({
timeout: 3000,
sandbox: {}
});
let execute = (code, tests) => {
return new Promise(resolve => resolve(vm.run(`${code} ${tests}`)))
};
我可能没有完全掌握它,这很简单,但这是编程。
任何帮助或见识将不胜感激,谢谢!