首页 > 解决方案 > 在 NodeJS 中跨多个获取命令保持活动

问题描述

我们的 NodeJS 应用程序基本上是一个代理:它接受来自客户端 A 的传入 HTTP GET 请求,并向后端 HTTP 服务器 B 发出上游请求,将它从 B 接收的数据映射到适合 A 的形式。每个客户端请求都会产生一个对服务器的单个请求 B.

为了最大限度地提高性能,我们希望在连续的客户端请求之间保持与 B 的 TCP 连接处于活动状态。因此,如果客户端 A、X、Y 和 Z 在 10 秒内都访问了我们的应用程序,我们希望在单个 TCP 连接中将所有 4 个请求代理回 B。

我们如何在多个传入的客户端请求中重用相同的 TCP 连接(或 fetch 命令)?

我们使用的是 Node 12 和最新的 ExpressJS。

标签: node.jsexpressfetchkeep-alive

解决方案


您可以配置HTTP 代理keepAlive: true在多个请求之间共享它,以便代理将跨多个请求重用 TCP 连接。如果你真的只想要一个连接,你可以使用maxSockets: 1选项,但最好有更多的连接,以防止正在进行的请求阻塞其他请求。

此外,agentkeepalive 包可以很好地替代 Node.js 标准库中的 HTTP 代理,并且有一个很好的关于如何使用它的 README。


推荐阅读