node.js - 在 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。
解决方案
您可以配置HTTP 代理并keepAlive: true
在多个请求之间共享它,以便代理将跨多个请求重用 TCP 连接。如果你真的只想要一个连接,你可以使用maxSockets: 1
选项,但最好有更多的连接,以防止正在进行的请求阻塞其他请求。
此外,agentkeepalive 包可以很好地替代 Node.js 标准库中的 HTTP 代理,并且有一个很好的关于如何使用它的 README。
推荐阅读
- python - 在 joblib 中缓存数据框
- r - 如何在 R 中以 pgm 格式对图像进行收费?
- javascript - ReactJS - 检测垂直滚动何时出现
- r - R和ggplot2 - 如何动态隐藏轴变量标签
- button - 如何通过按下按钮正确增加显示部分的点亮速率
- sql - 工作日之间的周末 SQL
- google-cloud-dns - 谷歌云 DNS 区域从裸露到 www URL 的映射
- javascript - 将 jQuery 应用于动态插入的 div
- google-cloud-dataflow - Beam/Dataflow:未定义窗口的拓扑的 maxTimestamp
- vuejs2 - 如何使用GeoSearchControl、vuejs通过国家代码限制对地点的搜索?