【问题标题】:How to block second (or later) HTTP request until the first request process is done. [Node.JS / Firebase cloud function]如何阻止第二个(或以后的)HTTP 请求,直到第一个请求过程完成。 【Node.JS / Firebase 云功能】
【发布时间】:2019-08-01 17:14:03
【问题描述】:

假设当我单击提交按钮时,HTTP 请求的服务器(节点 JS)处理时间为 10 秒。然后我同时双击这个按钮。这种情况的处理时间约为 10 秒。 (类似于并行处理)

我不想要这个。我想服务器阻止第二个请求,直到第一个进程完成。所以我的要求是花费大约 20 秒以上的时间。

请帮我找出解决方案或建议一些 node js 库。

【问题讨论】:

  • 以某种方式跟踪请求(即 cookie)并在服务器端更新正在处理的请求列表(如数组中的一些承诺)然后每次有新请求到来时,检查是否有另一个请求在处理与否。
  • 利用云任务 (cloud.google.com/tasks/docs) 是一种可能的想法(我还没有完全考虑过)。使用它,您可以流水线化您的工作。 Cloud Tasks 有一个最大并发调度的概念。如果设置为 1,那么您一次只能运行一个任务(序列化)。

标签: node.js google-cloud-functions


【解决方案1】:

将请求添加到队列中。然后一个接一个地处理队列。

我可以找到一个 npm 包 - 我没有使用它。

node-request-queue

编辑:这纯粹是 nodejs 的观点。如果您考虑到云函数或 Lambda,这可能行不通

【讨论】:

  • 遗憾的是,我认为这行不通(我很高兴错了)。我认为这项技术用于在单个 Node.js 运行时实例中序列化工作,而不是跨多个 Node.js 实例。如果我正确阅读了 OP,这是一个 Cloud Function 故事,并且必须假设每个函数都可以轻松地在其自己的 Node.js 运行时上运行(可能在物理上不同的底层硬件平台上)。
  • @Kolban 你是对的。我的大脑忽略了云功能部分,
猜你喜欢
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 2014-08-05
相关资源
最近更新 更多