当前位置: 首页 > 编程语言 > C#

通过临时启用NoDelay实现Socket“刷新”共享

时间:2023-04-11 02:13:40 C#

Socket“刷新”通过临时启用NoDelay后台我用C#实现了一个HTTP服务器。使用ab我发现了一个奇怪的性能问题。关闭keep-alive,每个请求需要5毫秒,而keep-alive需要40毫秒!测试页面生成一个字节[],使用单个套接字作为回复发送。发送呼叫。原因是我可以告诉Nrab在TCP堆栈中使用什么算法。TCP刷新?到目前为止,我在对我的服务的每个HTTP请求结束时使用NoDelay属性。socket.NoDelay=true;socket.NoDelay=false;现在解决了这个问题。但是我没有找到的文件的备份。这是在linux/mono系统上测试的。有没有一种标准的方法来刷新TCP连接?一个相关的答案是解决同样的问题。这里的区别是我想暂时禁用该算法。我用Wireshark测试了这个。不幸的是,socket.NoDelay=true;socket.NoDelay=false;没有效果。同样,socket.NoDelay=true;socket.Send(新字节[0]);socket.NoDelay=false;也没有效果。从观察到的行为来看,NoDelay属性似乎只影响对非空缓冲区发送的下一次调用。换句话说,您必须在NoDelay生效之前发送一些实际数据。所以我得出结论,如果您不想发送任何额外数据,则不能显式刷新套接字。但是,由于您正在编写一个HTTP服务器,因此您可以使用一些技巧:我现在肯定会将上面的内容添加到我的HTTP服务器:)我自己编写了一个非常流行的Web服务器,我不认为Naglealgortihm你真正的问题。您如何建立回复以及如何发送回复?TCP中没有刷新之类的东西。TCP是一种基于流的协议,用于分组/取消分组/拆分/连接数据。通过禁用nagle,它只会降低频率。不要禁用nagle。NagleTCP/IP算法旨在避免慢速网络上的小数据包(称为tinygrams)出现问题。该算法规定一个TCP/IP连接只能有一个尚未确认的未完成的小段。“小”的定义各不相同,但通常定义为“小于段大小”,在以太网上约为1500字节。看这里:在慢速网络上禁用TCP/IPNagle算法提高速度上面是C#学习教程:Socket通过临时启用NoDelay来“刷新”分享的全部内容,如果对大家有用需要了解一下更多关于C#的学习教程,希望大家多多关注—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: