gpt4 book ai didi

node.js - “Proxying” 使用 Node.js + Express 2 的大量 HTTP 请求

转载 作者:搜寻专家 更新时间:2023-10-31 22:48:43 26 4
gpt4 key购买 nike

我正在用 Node.js + Express 2 编写代理。代理应该:

  1. 解密POST负载并根据结果向服务器发出HTTP请求;
  2. 加密来自服务器的回复并将其发送回客户端。

加密相关部分工作正常。我面临的问题是超时。代理应在 15 秒内处理请求。实际上,其中大部分都在 500 毫秒以下。

当我增加并行请求的数量时出现问题。大多数请求都可以正常完成,但有些请求在 15 秒 + 几毫秒后失败。 ab -n5000 -c300 工作正常,但在并发数为 500 的情况下,某些请求会因超时而失败。

我只能推测,但问题似乎出在回调执行的顺序上。是否有可能先到的请求挂起直到 ETIMEDOUT 因为 Node 关注最新的请求,这些请求仍在 500 毫秒内及时处理。

P.S.:远程服务器没有问题。我正在使用 request与它进行交互。

更新

一些代码的工作方式:

function queryRemote(req, res) {
var options = {}; // built based on req object (URI, body, authorization, etc.)
request(options, function(err, httpResponse, body) {
return err ? send500(req, res)
: res.end(encrypt(body));
});
}

app.use(myBodyParser); // reads hex string in payload
// and calls next() on 'end' event

app.post('/', [checkHeaders, // check Content-Type and Authorization headers
authUser, // query DB and call next()
parseRequest], // decrypt payload, parse JSON, call next()
function(req, res) {
req.socket.setTimeout(TIMEOUT);
queryRemote(req, res);
});

我的问题如下:当 ab/ 发出比方说 20 个 POST 时,快速路由处理程序被调用了数千次。这种情况并不总是发生,有时会及时处理 20 个请求,也只有 20 个请求会得到及时处理。

当然ab不是问题。我 100% 确定 ab 只发送了 20 个请求。但是路由处理程序被多次调用。

我找不到这种行为的原因,有什么建议吗?

最佳答案

超时是由使用 http.globalAgent 引起的默认情况下可以处理 up to 5对一个 host:port 的并发请求(在我的情况下这还不够)。

ab 发送了数千个请求(而不是几十个)(Wireshark 在 OS X 下批准了事实;我无法在 Parallels 中的 Ubuntu 下重现这一点)。

关于node.js - “Proxying” 使用 Node.js + Express 2 的大量 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13196540/

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