如何获取nodejs中一个API的所有请求的状态

时间:2017-04-13 06:42:42

标签: node.js http express

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

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

请帮忙。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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