我希望以HTTP方式快速流式传输大文件从一个服务器到另一个服务器。
在此过程中,我注意到httplib被urllib3和requests使用,并且似乎硬编码了一次从流中获取8192字节的数据量。
为什么是8192?它比其他大小有何好处?
我希望以HTTP方式快速流式传输大文件从一个服务器到另一个服务器。
在此过程中,我注意到httplib被urllib3和requests使用,并且似乎硬编码了一次从流中获取8192字节的数据量。
为什么是8192?它比其他大小有何好处?
根据我所了解的,块大小应该与资源页面大小相同,但由于pagesize仅在UNIX上可用,因此将其硬编码为8192,以便所有其他系统特别是Windows不会受到阻塞。否则没有其他理由硬编码它。
Nginx webserver
这是来自nginx的内容
Syntax: client_body_buffer_size size;
Default: client_body_buffer_size 8k|16k;
ProxyIOBufferSize Directive
Description: Determine size of internal data throughput buffer
Syntax: ProxyIOBufferSize bytes
Default: ProxyIOBufferSize 8192
Context: server config, virtual host
Status: Extension
Module: mod_proxy
因此,Apache默认使用8192
作为代理缓冲区大小。
Apache客户端
Apache Java客户端文档指出
https://hc.apache.org/httpcomponents-client-4.2.x/tutorial/html/connmgmt.html
8192
字节的套接字缓冲区。Ruby客户端
在Ruby中,默认情况下值为16K
https://github.com/ruby/ruby/blob/814daf855e0aa2c3a1164dc765378d3a092a1825/lib/net/protocol.rb#L172
下面是一些线程:
如果您查看这些内容,共识在于8K / 16K作为缓冲区大小。并不是说必须固定为那个大小,而是可以配置,对于大多数情况,8k / 16K应该足够好。因此,我认为Python默认使用8K也没有问题。但是,是的,它应该是可配置的。
Python 3.7
将具有 可配置性,但如果您无法升级到相同版本,则可能无法帮助您的情况。
git blame
找到。 - shad0w_wa1k3r