我试图使用python3.5超级库实现我自己的HTTP / 2客户端。在请求大于64Kb的物体之前,一切似乎都能正常工作。
我已经将network_buffer_size
设置为大于默认值(实际为64K)的值,甚至设置库代码以将network_buffer_size设置得足够大,以便它可以处理响应但仍然是数据量无论文件有多大,从服务器收到的都是64K。
conn = hyper.HTTP20Connection(SERVER, int(sys.argv[2]), True, window_manager=FlowControlManagerUs, enable_push=False, ssl_context=ssl_context)
conn.network_buffer_size = 256000
conn.connect()
以下是我收到请求的地方:
resp = conn.get_response(strid)
data = resp.read()
我已经实现了FlowControlManager,只需将initial_window_size设置为较大的值。
答案 0 :(得分:0)
HTTP / 2中的流控制是通过两种类型的流控制窗口实现的:一个用于连接,一个用于每个流,用RFC 7540, 5.2 Flow control的话来说:
流量控制方案可确保同一连接上的流 不破坏性地相互干扰。流量控制用于 个人流和整个连接。
hyper允许通过子类hyper.http20.window.BaseFlowControlManager
实现您自己的流量控制策略。通过将initial_window_size
设置为较大值,您可以将连接窗口设置为较大的值。然而,流窗口保持不变,结果是流窗口的默认值 64 kb,来自5.2.1 Flow-Control Principles部分:
- 流量控制窗口的初始值为65,535个八位字节 对于新流和整体连接。
醇>
为了增加流的窗口,您还必须实现流控制管理器的increase_window_size
方法。