嘿,伙计们,Iv'e注意到,当我发送一个完整的数据包(在缓冲区中收集它的数据并发送)时,它比逐个字节发送数据包慢得多。用这种方法做网络游戏可以吗?
发布于 2009-12-12 19:49:08
我认为你需要定义你的测量点是什么(你到底在测量什么)。顺便问一下,这是TCP还是UDP?
无论如何,Winsock有它自己的内部缓冲区,你可以通过调用setsockopt来修改它们。
发布于 2009-12-12 20:06:12
听起来像是一个纠缠不休的问题。
您必须禁用对延迟要求很高的应用程序的喋喋不休。(参见setsockopt,TCP_NODELAY)。
解释:
TCP堆栈对小块的行为不同,试图在发送IP数据报的过程中以奇怪的方式将它们组合在一起。这是J.Nagle建议的性能优化(因此是nagling)。请记住,启用NODELAY将使每个send()调用都转换为内核模式,因此,如果性能对您所做的操作有影响,那么您可能希望通过内存复制的方式将流打包成块,然后再将它们提供给send()。
发布于 2009-12-12 19:42:18
这听起来很奇怪。在逐个字节地发送数据时,开销要大得多。您的传输报头将远远超过有效负载!更不用说O(n)个send
调用(其中n是字节数)。
如果这就是你所经历的,那你就做错了什么。
https://stackoverflow.com/questions/1893097
复制相似问题