我正在寻求快速的流媒体下载 - >上传以通过HTTP将大文件从一台服务器移动到另一台服务器。
在此期间,我注意到urllib3使用的httplib也因此请求,似乎硬编码从流中一次取多少到8192字节
这是为什么? 8192比其他尺寸有什么好处?
答案 0 :(得分:12)
根据我的发现,块大小应该是资源的页面大小,但由于pagesize仅在UNIX上可用,因此硬编码为8192,因此所有其他系统特别是Windows不会被阻止。否则没有其他理由对其进行硬编码。
答案 1 :(得分:4)
Nginx网络服务器
这是来自nginx
Syntax: client_body_buffer_size size;
Default: client_body_buffer_size 8k|16k;
设置读取客户端请求正文的缓冲区大小。如果请求主体大于缓冲区,则整个主体或仅其部分被写入临时文件。默认情况下,缓冲区大小等于两个内存页。这在x86,其他32位平台和x86-64上是8K。在其他64位平台上通常为16K
Apache WebServer
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
然后有以下线程
What is a good buffer size for socket programming?
What is the best memory buffer size to allocate to download a file from Internet?
Optimum file buffer read size?
如果你看看其中的许多内容,那么共识就是8K / 16K作为缓冲区大小。并不是它应该固定,但可配置和8k / 16K应该足够大,适合大多数情况。所以我没有看到Python的问题,默认情况下也使用8K。但是,它应该是可配置的
Python 3.7
会configurable这样,但如果您无法升级到原因,则可能无法帮助您解决问题。