微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何防止 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 举报,一经查实,本站将立刻删除。