【问题标题】:POST requests backlogged after six requests from same browser in express. Unexpected/Strange behaviour [duplicate]来自同一浏览器的六个快速请求后,POST 请求积压。意外/奇怪的行为[重复]
【发布时间】:2022-07-29 19:38:35
【问题描述】:

我有一个应用程序需要很长时间才能处理发布请求。 如果客户端在短时间内(比如 5 秒)发送超过 6 个请求,我会得到一些意想不到的行为。

例如: 服务器端

app.options('/',cors({origin: "http://localhost:5050"}));
app.post('/',cors({origin: "http://localhost:5050"}),async(req,res) => {
  console.log(Date.now());
  await new Promise(resolve => setTimeout(resolve, 5000));
  console.log("----complete----")
  res.send("Success");
})

客户端:

$.ajax ({
   url: "http://127.0.0.1:5050/",
   type: "POST",
   data: JSON.stringify({token:"62e2c285a01937cdb462985d"}),
   contentType: "application/json; charset=utf-8"
}).done(function(result,status,xhr){
    console.log("done");}

如果客户端在 5 秒内发出超过 7 个请求,您将获得以下输出(服务器端) 输出(自纪元以来的毫秒数):

1659038307446
1659038307703
1659038307985
1659038308260
1659038308528
1659038308818
----complete----
1659038312459
----complete----
1659038312712
----complete----
1659038312994
----complete----
1659038313266
----complete----
----complete----
----complete----
----complete----
----complete----
----complete----

如您所见,前 6 次记录的时间间隔约为 0.3 秒(这是我单击浏览器上的按钮启动请求的速度),但第 6 次和第 7 次记录的时间间隔约为 5 秒。我本来希望所有记录的时间间隔 0.3 秒。显然节点在开始处理第 7 个请求之前正在等待完成第 1 个请求。

为什么会发生这种情况,为什么限制为 6,并且无论如何要覆盖这种行为?

编辑:

我发现在一个浏览器上发出超过 6 个请求后,切换到另一个浏览器并再发出 6 个请求。来自其他浏览器的这些请求会立即得到处理。这不会发生在单独的选项卡上。仅在不同的浏览器上。我由此推断 express 必须通过检查客户端的 ip 和端口或通过其他方式识别客户端来实现某种速率限制。

【问题讨论】:

  • 我相信你应该阅读事件循环developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop
  • @HugoDos 谢谢你的推荐。我发现它很有用,但仍然无法回答我自己的问题。阅读后我最初认为 express/node 一次服务 6 条消息,所以我通过尝试使用不同的浏览器发出更多请求来测试这个理论(见编辑)。我的理论被推翻了,六个似乎也很小。
  • 浏览器对发送到同一域的并发请求的数量有限制。
  • @Phil Cheers,这正是我所需要的

标签: node.js express


【解决方案1】:

与express无关,该行为是由于浏览器内置的并发HTTP请求限制。 https://stackoverflow.com/questions/62573165/what-happens-at-the-browser-level-when-a-max-concurrent-http-request-limit-is-hi 就像菲尔在评论中所说的那样。 我可以确认这一点,因为我使用另一个节点运行时发出了 15 个并发请求,并且记录的时间都是均匀分布的 输出:

1659094583440
1659094583444
1659094583444
1659094583445
1659094583445
1659094583446
1659094583446
1659094583446
1659094583447
1659094583447
1659094583447
1659094583448
1659094583448
1659094583449
1659094583449
----complete----
----complete----
----complete----
----complete----
----complete----
----complete----
----complete----
----complete----
----complete----
----complete----
----complete----
----complete----
----complete----
----complete----
----complete----

【讨论】:

    猜你喜欢
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2016-09-14
    • 2013-02-15
    • 2017-05-07
    • 1970-01-01
    相关资源
    最近更新 更多