节点 JS - 文件生成器体系结构



需要将文件生成器 REST API 端点添加到 Web 应用。到目前为止,我想出了以下想法:

  1. 客户端将文件参数发送到终结点
  2. 服务器接收请求并使用 AMQP 将参数发送到专用服务
  3. 专用服务创建一个文件,将其放入服务器文件夹,并发送使用文件名创建的文件的响应
  4. 终结点使用文件向客户端发送响应

我不确定将 REST 请求保留在服务器上这么长时间是否是个好主意。但仍然不想使用带有生成的链接或套接字的电子邮件。

我是否需要在请求中设置超时时间,以便在长时间等待后不会被拒绝?

据我所知,rest api 调用的最大超时时间为 120 秒。如果服务创建文件需要更多时间,那么我需要使用套接字,对吗?

我处理类似问题的方式是做这样的事情:

  1. 客户端发送文件请求。
  2. 服务器将其添加到具有"请求"状态的队列中,并几乎立即使用响应(客户端(响应,其中包括检索文件的 URL。
  3. 一些后台线程/worker/webJob/etc 在与实际 Web 服务器不同的进程中运行,并不断监视队列 - 当它看到一个新条目出现时,它会将队列更新为"正在生成"状态并开始生成文件。 完成后,它将队列更新为"就绪"状态并继续...
  4. 当服务器收到下载文件的请求(通过它提供给客户端的 URL(时,它可以检查队列中文件的状态。 如果尚未准备好,它可以给出指示这一点的响应。 如果它已准备就绪,它可以简单地响应文件内容。
  5. 客户端可以使用对初始请求的响应在适当的时间长度后重新查询给定的 URL,或者每隔几秒钟或任何最合适的方式重复查询它。

您需要某种方法来存储系统的两个部分都可以轻松访问的队列 - 数据库是显而易见的,但您可以使用其他东西......

此方法避免在请求线程上执行过多操作,或在服务器编译文件时让客户端"挂起"请求。

这就是我在这种情况下(成功(所做的。 它还可以轻松地将生命周期之类的内容添加到队列中,因此文件也可以在一段时间后自动"过期"......

相关内容

最新更新