假设您正在通过 TCP/IP 以块的形式传输任意长度的文件:
looping...
read(buffer, LENGTH)
send(mysocket, buffer, LENGTH, flags)
我的问题是,LENGTH 的最佳值是多少?还是根本不重要?我已经看到使用了从 256 字节到 8192 字节的所有内容。
假设您正在通过 TCP/IP 以块的形式传输任意长度的文件:
looping...
read(buffer, LENGTH)
send(mysocket, buffer, LENGTH, flags)
我的问题是,LENGTH 的最佳值是多少?还是根本不重要?我已经看到使用了从 256 字节到 8192 字节的所有内容。
取决于您所说的最佳。为了优化带宽使用,您希望最大化数据包大小,因此至少发送网络数据包大小(在以太网上通常约为 1500 字节)。如果您从磁盘读取 4096 或 8192 字节将是一个不错的值。
如果您的缓冲区大小转换为数据包大小,那么较短的缓冲区会更好 - 在数据包错误的情况下重新传输更少。
ATM 以 54 字节的数据包将这一点发挥到了极致。
但是根据您的库,它可能会自己进行一些缓冲并独立设置其数据包大小。YMMV。
如果您通过高延迟连接发送大量数据,则可以通过更大的发送缓冲区获得更好的吞吐量。这是一个很好的解释: http ://www.onlamp.com/pub/a/onlamp/2005/11/17/tcp_tuning.html