在 NodeJS 中跨多个获取命令保持活动
Keepalive across multiple fetch commands in NodeJS
我们的 NodeJS 应用程序基本上是一个代理:它接受来自客户端 A 的传入 HTTP GET 请求,并向后端 HTTP 服务器 B 发出上游请求,将从 B 接收的数据映射到适合 A 的格式。每个客户端请求导致对服务器 B 的单个请求。
为了最大限度地提高性能,我们希望在连续的客户端请求之间保持与 B 的 TCP 连接处于活动状态。因此,如果客户端 A、X、Y 和 Z 都在 10 秒内访问我们的应用程序,我们希望在单个 TCP 连接内将所有 4 个请求代理回 B。
我们如何在多个传入的客户端请求中重复使用相同的 TCP 连接(或获取命令)?
我们正在使用 Node 12 和最新的 ExpressJS。
您可以将 an HTTP agent 配置为 keepAlive: true
并在多个请求之间共享它,以便代理将在多个请求之间重用 TCP 连接。如果你真的只想要一个连接,你可以使用 maxSockets: 1
选项,但最好有更多的连接来防止一个正在运行的请求阻塞其他请求。
此外,agentkeepalive package 可以很好地替代 Node.js 标准库中的 HTTP 代理,并且有一个关于如何使用它的自述文件。
我们的 NodeJS 应用程序基本上是一个代理:它接受来自客户端 A 的传入 HTTP GET 请求,并向后端 HTTP 服务器 B 发出上游请求,将从 B 接收的数据映射到适合 A 的格式。每个客户端请求导致对服务器 B 的单个请求。
为了最大限度地提高性能,我们希望在连续的客户端请求之间保持与 B 的 TCP 连接处于活动状态。因此,如果客户端 A、X、Y 和 Z 都在 10 秒内访问我们的应用程序,我们希望在单个 TCP 连接内将所有 4 个请求代理回 B。
我们如何在多个传入的客户端请求中重复使用相同的 TCP 连接(或获取命令)?
我们正在使用 Node 12 和最新的 ExpressJS。
您可以将 an HTTP agent 配置为 keepAlive: true
并在多个请求之间共享它,以便代理将在多个请求之间重用 TCP 连接。如果你真的只想要一个连接,你可以使用 maxSockets: 1
选项,但最好有更多的连接来防止一个正在运行的请求阻塞其他请求。
此外,agentkeepalive package 可以很好地替代 Node.js 标准库中的 HTTP 代理,并且有一个关于如何使用它的自述文件。