为FTP和HTTP传输选择缓冲区大小

时间:2008-11-11 23:28:58

标签: algorithm http ftp communication

在实现低级HTTP和FTP传输时,如何选择缓冲区的大小(我从套接字读取或写入的字节数)以获得最大吞吐量?我的应用程序应该使用HTTP或FTP在130 Kbps到3 Mbps之间的连接上传输数据(我事先知道预期的速度)。有时它是单向转移,有时它是双向转移。我应该坚持使用一些平均缓冲区大小,还是必须根据连接速度改变它?

感谢。

3 个答案:

答案 0 :(得分:12)

选择超过8KB的缓冲区大小。 9000通常是即使是最快的网络中使用的最大MTU(最大传输单元)大小。

当您使用大于连接MTU的缓冲区时,操作系统会根据需要将其分解为MTU大小的部分,因此您在MTU上使用的任何内容对网络性能影响不大。

但是,使用大缓冲区可能会对性能产生其他影响,如果您正在传输文件,那么使用大缓冲区可能会提高读取性能,从而提高应用程序的速度。

所以,通常选择一个像16KB这样的好轮数是个好主意。绝对不要低于1500,因为这会对网络性能产生负面影响(导致操作系统有时会发送小数据包,从而降低网络性能)。

答案 1 :(得分:6)

首先,进行一些测量。

然后,在进行可靠的性能测量后,更改缓冲区大小并绘制速度与缓冲区大小的关系图。

由于您事先知道连接速度,因此您应该可以使用不同的实际缓冲区大小来测量实际速度。

操作系统,协议堆栈和网络太复杂,无法根据第一原则得出答案。你需要在做任何事之前进行衡量。

答案 2 :(得分:0)

您可以获得缓冲区大小:httpSocket.getReceiveBufferSize(); 我强烈建议在读取过程中将此缓冲区写入RAM。 例如:ByteArrayOutputStream memoryFile。 并且只有在填充缓冲区后,才将其写入磁盘。