3

我有一台服务器,每个请求需要传输大量数据(~1-2 gigs)。每次发送调用应具有的推荐数据量是多少?有关系吗?

4

2 回答 2

1

您的数据包大小受协议的最大传输单元 (MTU) 限制。如果您发送的数据包大于 MTU,那么您会收到数据包碎片。

您可以做一些数学运算:http ://www.speedguide.net/articles/mtu-what-difference-does-it-make--111 更多参考资料:http ://en.wikipedia.org/wiki/Maximum_transmission_unit

但最终我的建议是,如果你的目标足够好,只是让操作系统网络层完成它的工作,除非你正在编写原始套接字或传递一些时髦的选项,否则操作系统将有一个网络缓冲区并尝试尽力而为。

考虑到最后一个选项,socket.send() 只不过是从用户进程内存到内核私有内存的内存传输。经验法则是不超过通常为 4KB的虚拟内存页面大小http://en.wikipedia.org/wiki/Page_(computer_memory )。

于 2012-11-16T04:15:45.920 回答
1

TCP/IP 堆栈负责不发送大于 PATH MTU 的数据包,并且您必须非常努力地使其发送小于MTU 的数据包,以不利于吞吐量的方式:并且没有办法发现任何给定连接的实际路径 PTU 是什么。因此,请不要考虑路径 MTU。

您可以而且应该使每一个都send()尽可能大。

于 2012-11-16T06:41:29.483 回答