首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >组网方法

组网方法
EN

Stack Overflow用户
提问于 2009-12-12 19:21:16
回答 4查看 127关注 0票数 0

嘿,伙计们,Iv'e注意到,当我发送一个完整的数据包(在缓冲区中收集它的数据并发送)时,它比逐个字节发送数据包慢得多。用这种方法做网络游戏可以吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-12 19:49:08

我认为你需要定义你的测量点是什么(你到底在测量什么)。顺便问一下,这是TCP还是UDP?

无论如何,Winsock有它自己的内部缓冲区,你可以通过调用setsockopt来修改它们。

票数 0
EN

Stack Overflow用户

发布于 2009-12-12 20:06:12

听起来像是一个纠缠不休的问题。

您必须禁用对延迟要求很高的应用程序的喋喋不休。(参见setsockopt,TCP_NODELAY)。

解释:

TCP堆栈对小块的行为不同,试图在发送IP数据报的过程中以奇怪的方式将它们组合在一起。这是J.Nagle建议的性能优化(因此是nagling)。请记住,启用NODELAY将使每个send()调用都转换为内核模式,因此,如果性能对您所做的操作有影响,那么您可能希望通过内存复制的方式将流打包成块,然后再将它们提供给send()。

票数 1
EN

Stack Overflow用户

发布于 2009-12-12 19:42:18

这听起来很奇怪。在逐个字节地发送数据时,开销要大得多。您的传输报头将远远超过有效负载!更不用说O(n)个send调用(其中n是字节数)。

如果这就是你所经历的,那你就做错了什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1893097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档