0

我想用 NodeJS 创建一个 Express 服务器,其中一个端点需要执行繁重的 bash 操作。但是这样做会疯狂地减慢整个服务器的速度!例如,我创建了一个端点,它只在后台/ping执行命令并返回结果。ping 8.8.8.8

如果我向服务器启动 2 个并行请求,它们会相互阻塞并一个接一个地执行:

阻塞请求

我尝试使用工作线程,但无法完成。这在 NodeJS 中是否可行?如果不是......我怎么能做到这一点?

4

1 回答 1

0

对于使用参数的工作线程修复了浏览器中的问题!

但是我没有工作线程的旧代码不起作用:

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));
        });         
    });
});
于 2021-09-14T12:41:13.917 回答