gpt4 book ai didi

node.js - 如何在nodejs中获取对一个API的所有请求的状态

转载 作者:可可西里 更新时间:2023-11-01 16:36:22 27 4
gpt4 key购买 nike

我想在 nodejs 中获取 API 服务器状态。我正在使用 nodejs 打开一个接口(interface):“api/request?connId=50&timeout=90”。此 API 将在服务器端提供的时间内保持请求运行。在提供的时间成功完成后,它应该返回 status/OK。当我们有多个连接 ID 和超时时,我们希望 API 返回服务器上所有正在运行的请求以及它们完成的剩余时间,如下所示,其中 4 和 8 是 connId 和 25 和15 是请求完成的剩余时间(以秒为单位):

{"4":"25","8":"15"}

请帮忙。

最佳答案

Node.js 服务器在单个线程中使用异步模型,这意味着在任何时候,只有一个请求 (connId) 正在由 Node 执行(除了...你有多个 node.js实例,但让我们保持场景简单并忽略这种情况)。

当处理一个请求(运行其处理程序代码)时,它可能会启动一个异步任务,例如读取文件,然后继续执行。请求本身的处理程序代码将在不等待异步任务的情况下执行,并且当此处理程序代码完成运行时,从 Node.js 的角度来看,请求处理本身已完成 - 异步任务结果的处理是另一回事时间, Node 不关心它的进度。

因此,为了返回所有请求的剩余时间——我猜这是其他请求的异步任务的剩余时间,因为其他请求的处理程序代码执行的剩余时间没有任何意义,必须有一些地方存储所有请求的信息,包括:

  • 请求的connId和startTime(收到请求的时间)。
  • 请求的timeout值,在URL中作为参数传递。
  • 请求的估计剩余时间,此信息是任务特定的,必须从其他异步任务相关服务中检索(您可以使用 setInterval 按时间拉取时间或让其他服务推送最新的剩余时间)。 Node.js 不知道任何异步任务的剩余时间信息。

通过这种方式,您可以跟踪所有正在运行的请求及其剩余时间。在一个请求被返回之前,你可以查看上面的“某处”来计算所有请求的剩余时间。这个“某个地方”可以是全局变量,也可以是 Redis 等内存数据库,甚至是 MySQL 等普通数据库。

请注意:计算出的剩余时间并不准确,因为读取和计算本身会耗费时间并引入错误。

关于node.js - 如何在nodejs中获取对一个API的所有请求的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43385272/

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