具有自定义 TCP 读取缓冲区的 HTTP2 客户端

HTTP2 client with a custom TCP read buffer

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

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

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

谢谢

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

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

步骤 A) 是基础,否则默认 HTTP/2 流量控制 window(仅 65535 字节)将在服务器 TCP 写入缓冲区填满之前停止服务器下载(即使客户未阅读任何内容)。

上述步骤可以通过任何充分配置的 HTTP/2 客户端执行。

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