如何防止 pm2 将任务分配给繁忙的线程?

问题描述

这是我的应用程序的简单再现:

const express = require('express')
const app = express()

app.get('/apitest1',(req,res) => {
    while (true) {}
    res.send("Success")
});

app.get('/apitest2',res) => {
    res.send("Success API Test 2\n")
});

app.listen(8181,() => {
  console.log(`Example app listening at http://localhost:8181`)
})

while (true) {} 用于模拟一个长时间的同步过程(大约需要 60 秒),该过程生成要发回的数据。

正如您想象的那样,对 /apitest1 的任何请求都会挂断我的应用程序正在运行的线程,并且只要 while 循环是运行。

我的解决方案是在集群模式下使用 pm2 并生成应用程序的 8 个实例。这样 pm2 通过将所有传入请求发送到 8 个不同的线程来对所有传入请求进行负载平衡。该解决方案的问题在于,pm2 会将以下 8 个请求中的至少 1 个发送到忙碌且仍然无响应的线程(仍在运行 while 循环的线程)。

我的问题有两个方面:如何防止 pm2 在运行该循环时向繁忙线程分配更多请求?或者如何在仍然允许它完成处理并将数据发送到原始请求的同时释放该线程(我认为这是不可能的)?...或任何其他建议。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)