代码之家  ›  专栏  ›  技术社区  ›  wasker

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

  •  14
  • wasker  · 技术社区  · 17 年前

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

    3 回复  |  直到 13 年前
        1
  •  14
  •   SoapBox    17 年前

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

    当您使用的缓冲区大于连接的MTU时,操作系统会根据需要将其分解为MTU大小的部分,因此通过MTU使用的任何东西都不会对网络性能产生什么影响。

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

        2
  •  6
  •   S.Lott    17 年前

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

    因为您预先知道连接速度,所以应该能够获得不同实际缓冲区大小的实际速度的一些测量值。

        3
  •  0
  •   Master    7 年前

    可以获取缓冲区大小:httpSocket.getReceiveBufferSize(); 只有在填充缓冲区后,才能将其写入磁盘。