tcp - 具有自定义 TCP 读取缓冲区的 HTTP2 客户端
问题描述
我想要一个带有非常小的 TCP 套接字读取缓冲区的 HTTP2 客户端。系统中的其他套接字应保持默认设置(不能通过 /proc/sys/net/ipv4/tcp_rmem 调整全局 tcp 设置)
是否有允许调整客户端读取缓冲区的实用程序(例如curl )?
(大图:我正在测试一个服务器,我的主要反对是填满该服务器的 tcp 写缓冲区。我的第一种方法是尝试创建一个读取缓冲区非常小的客户端,以便服务器的缓冲区会很快填满。任何也欢迎其他方法...)
谢谢
解决方案
您无需调整客户端的低级 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 客户端的示例用法。
推荐阅读
- javascript - 如果我没有 Mac 可连接,如何在 iOS 上的 Safari 中检查浏览器错误?
- android - 反应原生onesignal无法在android中注册用户
- sql - 是否可以在 SQL Server 中从现有表创建新表并更改列数据类型?
- maven - 如何在 Windows 上修复 Maven 中的“缺少要求”错误
- php - Laravel 自动重试失败通知
- react-native - React Native 应用程序中类似 Uber 的抽屉导航
- python - Python嵌套字典在内部比较值
- php - 如何从 Laravel 数据库中的 Products 表中查询卖家 ID
- php - PHP 生成一个从 0 到 36 的数字可能是公平的
- django - 突然我在端点上得到 502,其余工作正常