我想用 NodeJS 创建一个 Express 服务器,其中一个端点需要执行繁重的 bash 操作。但是这样做会疯狂地减慢整个服务器的速度!例如,我创建了一个端点,它只在后台/ping
执行命令并返回结果。ping 8.8.8.8
如果我向服务器启动 2 个并行请求,它们会相互阻塞并一个接一个地执行:
我尝试使用工作线程,但无法完成。这在 NodeJS 中是否可行?如果不是......我怎么能做到这一点?
我想用 NodeJS 创建一个 Express 服务器,其中一个端点需要执行繁重的 bash 操作。但是这样做会疯狂地减慢整个服务器的速度!例如,我创建了一个端点,它只在后台/ping
执行命令并返回结果。ping 8.8.8.8
如果我向服务器启动 2 个并行请求,它们会相互阻塞并一个接一个地执行:
我尝试使用工作线程,但无法完成。这在 NodeJS 中是否可行?如果不是......我怎么能做到这一点?
对于使用参数的工作线程修复了浏览器中的问题!
但是我没有工作线程的旧代码不起作用:
app.get('/test', (req, res) => {
/* create new uuid to find xml */
Object.assign(req.body, {id: uuid()});
exec(`C:/Progress/DLC117-x32/bin/_progres.exe -b -db ${db} -U ${user} -P ${password} -H ${host} -S ${service} -ld basis -N TCP -T C:/temp -Mm 16384 -cpstream 1252 -cpinternal 1252 -cpcoll BASIC -p pa/procedure.p`,
(error, stdout, stderr) => {
if (error) {
logger.log(`error: ${error.message}`);
res.statusCode = 400;
res.end(`${error.message}`);
return;
}
if (stderr) {
logger.log(`error: ${stderr}`);
res.statusCode = 400;
res.end(`${stderr}`);
return;
}
if(stdout != "") {
res.statusCode = 200;
res.end(`${stdout}`)
return;
}
/* file was successfully written */
fs.readFile(path.join(__dirname, 'exports', req.body.id + '.xml'), (err, data) => {
if(err) {
logger.log(`xml-read-error: ${err}`);
res.end(`${err}`);
return;
}
res.end(xmlParser.toJson(data));
});
});
});