【问题标题】:How to get the status of all requests to one API in nodejs如何在nodejs中获取对一个API的所有请求的状态
【发布时间】:2017-09-09 03:54:55
【问题描述】:

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

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

请帮忙。

【问题讨论】:

  • 我对您的需求有点困惑。当您在api/request?connId=50&timeout=90 这样的端点上发送请求时,服务器会占用请求提供的外卖时间吗?而且您还自己提供connId?之后你还想像你在另一个端点中所说的那样获取请求的信息??
  • 为了知道所有connId的startTime和Timeout值,你需要将它们存储在一个地方:一个全局变量,内存数据库如Redis,或普通数据库如MongoDB等。到目前为止,您尝试过什么?
  • hii Tolsee,我已经通过了 connectionId 和 timeout 。之后,当我们尝试 'api/serverStatus' 时,我想要关于所有连接 ID 的信息,以及在我的问题中讨论的信息。然后我困惑如何计算所有connId对应的剩余时间......谢谢
  • @shaochuancs ,实际上我希望服务器上所有正在运行的请求都有剩余时间完成。而不是已经完成的人。所以我有点困惑如何使用给定的 connectionIDS 跟踪所有正在运行的请求。如果我将使用任何数据库而不是我只存储连接IDS 记录未运行进程。
  • 对于time left for completion,是否仅由 startTime 和 Timeout 值决定?还是特定于任务的请求?

标签: node.js http express


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-12-10
    • 1970-01-01
    • 2016-02-20
    • 2021-09-26
    • 2017-04-01
    • 2019-07-22
    • 2019-03-02
    • 1970-01-01
    • 2018-01-05
    相关资源
    最近更新 更多