【问题标题】:JS: How to manage a POST request queueJS:如何管理 POST 请求队列
【发布时间】:2022-05-05 23:35:56
【问题描述】:

我创建了一个 API,允许您发出一个不会立即向客户端返回结果并且需要处理的 POST 请求。我想允许客户端发送多个 POST 请求,这些请求一次排队并处理一个。你能推荐一个可以帮助我完成这项任务的包吗?你能举个例子吗:

  • 如何创建队列
  • 如何将 POST 请求添加到队列中

【问题讨论】:

  • Node.js 的内置队列有什么问题?

标签: javascript node.js api rest


【解决方案1】:

如果您的任务繁重且需要使用 Node.js worker threads,请查看作业队列模块,例如 BullBullMQBree 等。

前两个,需要Redis队列存储,最后一个,只是RAM。

否则,您可以使用 MQ 代理,如 Kafka 或 RabbitMQ,并与它们一起工作。

因此,您的POST 请求可以将作业放入队列中并执行,而您的客户端可以通过唯一(作业)ID 或任何其他参数在另一个端点上请求结果。或者通过 WebSocket 接收通知。由您决定。

【讨论】:

    【解决方案2】:

    演员在其运行中访问的队列 URL。了解如何在参与者运行之间共享您的队列。从 Apify 控制台或通过 API 访问和管理请求队列。

    请求队列使您能够排队和检索请求,例如带有 HTTP 方法和其他参数的 URL。它们不仅在网络抓取中很有用,而且在您需要处理大量 URL 并将新链接加入队列的任何地方都非常有用。

    请求队列存储支持广度优先和深度优先的爬取顺序,以及自定义数据属性。它允许您查询是否已找到特定 URL,将新 URL 推送到队列并获取下一个要处理的 URL。

    【讨论】:

      【解决方案3】:

      您可以使您的 POST 请求承诺并将它们链接到 .then() 调用中。在这里您可以看到顺序承诺解析的实现:Resolve promises one after another (i.e. in sequence)?

      一个更老派的方法是创建一个function,我们称之为doPosts,你可以像doPosts(requestData, index)一样调用它,它会向requestData[index]发送一个POST请求,在回调中它会拨打doPosts(requestData, index + 1)

      您还可以创建一个for 循环,您可以在其中按顺序发送POST 请求await

      也可以设置XmlHttpRequestopen函数的第三个参数:

          var client = new XMLHttpRequest();
          client.open("POST", "/log", false);
      

      上面的false 表示同步。因此,您可以循环请求数据并发送同步请求。

      【讨论】:

        猜你喜欢
        • 2011-07-16
        • 2018-01-07
        • 2021-11-10
        • 2016-05-04
        • 2019-11-04
        • 1970-01-01
        • 1970-01-01
        • 2017-08-19
        • 1970-01-01
        相关资源
        最近更新 更多