首页 > 解决方案 > 使用 HTTP2 如何限制并发请求的数量?

问题描述

我们有一个client <-> server通过 HTTP1.1 工作的系统。客户端正在向服务器发出数百个(有时数千个)并发请求。

因为浏览器对HTTP1.1连接的默认限制客户端实际上是分批(6~8)个并发请求发出这些请求,我们认为如果我们可以增加并发请求的数量,我们可以得到一些性能提升。

我们将系统移动到通过 HTTP2 工作,我们看到客户端同时请求所有请求,如我们所愿。

现在的问题恰恰相反:服务器无法处理这么多并发请求。

我们如何将客户端同时执行的并发请求数量限制为对服务器更易于管理的事情?假设有 50 ~ 100 个并发请求。

我们假设 HTTP2 可以让我们逐渐增加并发连接的数量:

使用 HTTP/2,客户端仍然可以完全控制服务器推送的使用方式。客户端可以限制并发推流的数量;调整初始流控窗口,控制首次打开流时推送多少数据;或完全禁用服务器推送。这些首选项通过 HTTP/2 连接开始时的 SETTINGS 帧进行通信,并且可以随时更新。

也在这里:

O也许,如果可能的话,我们可以在服务器端限制这一点(我认为更易于维护)。

但看起来这些解决方案是在谈论服务器推送,而我们所拥有的是客户端拉取。

如果有任何帮助,我们的架构如下所示:

Client ==[http 2]==> ALB(AWS Beanstalk)  ==[http 1.1]==> nginx  ==[http 1.0]==> Puma

标签: ajaxnginxrequesthttp2

解决方案


SETTINGS框架中有特殊设置

您可以SETTINGS_MAX_CONCURRENT_STREAMS100服务器端指定

参考


推荐阅读