【问题标题】:HTTP2 client with a custom TCP read buffer具有自定义 TCP 读取缓冲区的 HTTP2 客户端
【发布时间】:2020-01-05 12:38:13
【问题描述】:

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

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

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

谢谢

【问题讨论】:

  • 可以在客户端的源代码中为每个套接字设置套接字缓冲区 - 使用 setsockoptSO_RCVBUF
  • @SteffenUllrich 我正在寻找提供此功能的现有客户端,我试图避免自己编写这样的客户端

标签: tcp automated-tests http2


【解决方案1】:

您无需调整客户端的低级 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 客户端的示例用法可以看here

【讨论】:

  • 感谢@sbordet 指出必须增加 HTTP/2 窗口大小
猜你喜欢
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
相关资源
最近更新 更多