首页 > 解决方案 > 具有自定义 TCP 读取缓冲区的 HTTP2 客户端

问题描述

我想要一个带有非常小的 TCP 套接字读取缓冲区的 HTTP2 客户端。系统中的其他套接字应保持默认设置(不能通过 /proc/sys/net/ipv4/tcp_rmem 调整全局 tcp 设置)

是否有允许调整客户端读取缓冲区的实用程序(例如curl )?

大图:我正在测试一个服务器,我的主要反对是填满该服务器的 tcp 写缓冲区。我的第一种方法是尝试创建一个读取缓冲区非常小的客户端,以便服务器的缓冲区会很快填满。任何也欢迎其他方法...)

谢谢

标签: tcpautomated-testshttp2

解决方案


您无需调整客户端的低级 TCP 套接字读取缓冲区,以填充 TCP 服务器写入缓冲区。

您需要做的是 A) 让客户端(在连接设置时)向服务器发送一个非常大的 HTTP/2 接收窗口,以便 TCP 流量控制在HTTP/2 流量控制之前启动;B)让服务器向客户端发送一个大的内容并且让客户端不读取内容(或者每 N 毫秒一次非常缓慢地读取 1 个字节)。

步骤 A) 是基本的,否则默认的 HTTP/2 流控制窗口(只有 65535 字节)将在服务器 TCP 写入缓冲区填满之前停止服务器下载(即使客户端没有读取任何内容)。

可以使用任何可配置的 HTTP/2 客户端执行上述步骤。

免责声明,我是Jetty中 HTTP/2 的实现者,如果您使用 Java,则可以使用 Jetty HTTP/2 客户端并按照上述步骤操作。可以在此处查看Jetty 的 HTTP/2 客户端的示例用法。


推荐阅读