gpt4 book ai didi

node.js - 在 Node 上加载

转载 作者:搜寻专家 更新时间:2023-11-01 00:06:39 24 4
gpt4 key购买 nike

我们有一个 C# Web API 服务器和一个 Node Express 服务器。我们从 C# 服务器向 Node 服务器上的路由发出数百个请求。 Node 服务器上的路由做了大量工作,通常 6-8 秒不返回。

同时发出数百个这样的请求似乎会导致 Node 服务器失败。 Node 服务器输出中的错误包括 socket hang upECONNRESET。来自 C# 端的错误说

No connection could be made because the target machine actively refused it.

此错误发生在处理了不可预测数量的请求之后,这让我认为它只是使服务器过载。在 C# 端使用 Thread.Sleep(500) 可以让我们处理更多的请求,摆弄那里的等待或多或少会成功,但线程休眠很少是正确的答案,我认为这个案例也不异常(exception)。

我们是否只是对 Node 服务器施加了太多压力?这只能通过负载平衡或某种形式的集群来解决吗?如果有另一种选择,它会是什么样子?

我开始探索的一条路径是 node-toobusy模块。如果我返回 503,那么下面代码中的过程应该是什么?我应该 Thread.Sleep 然后重新提交请求吗?

最佳答案

听起来您的 node.js 服务器过载了。

The route on the Node server does intensive work and often doesn't return for 6-8 seconds.

这是一种难闻的气味——如果您的 Node 进程正在进行大量计算,它将暂停事件循环直到计算完成,并且将无法处理任何其他请求。您可能应该让它在工作进程中进行计算,如果可用,它将在另一个 cpu 核心上运行。 cluster 是可让您执行此操作的 Node 内置模块,所以我会指出您的位置。

One path I'm starting to explore is the node-toobusy module. If I return a 503 though, what should be the process in the following code? Should I Thread.Sleep and then re-submit the request?

这取决于您的应用程序和您的预期负载。如果在此期间事情可能会足够冷静,您可能想要刷新一次或两次,但对于您的 API,您可能也只想在 C# 中返回 503 - 最好让客户端知道服务器太忙并让他们知道做出自己的决定,然后代表它保持刷新。

关于node.js - 在 Node 上加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35145353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com