我有一个ejs页面,它启动一个执行shell脚本的GET请求。
节点js在使用shell脚本
的输出执行脚本后响应页面res.render{
output: shell_script_output
}
脚本正确执行并在node.js控制台中打印输出。
但是我的浏览器在2分钟后出现连接超时错误,因为脚本执行时间超过5分钟。
对此最佳解决方案是什么?如何让ejs页面等到脚本执行完毕?
感谢。
答案 0 :(得分:1)
不是运行脚本,而是将请求的详细信息放在作业队列上(可能是数据库表,或者,如果你想变得复杂,就像ZeroMQ那样)并立即返回(传递作业的id)回应)。
让一个单独的进程监视队列并在有作业时触发shell脚本。脚本完成后,将结果放入响应队列。
同时,回到客户端,定期轮询服务器(比如说每30秒),并请求作业ID。让服务器检查响应队列以查看该作业的数据是否存在,然后以“Here it is”,“尚未准备好”或“已经15分钟,某些事情可能出错”回复。