草庐IT

Python Twisted TCP 套接字如何设置 TCP_NODELAY(禁用 Nagle 算法)?

我有一款实时多人游戏正在持续开发中(目前在应用商店上架:https://itunes.apple.com/us/app/blewp!-eat-or-be-eaten-mmo/id996122625?mt=8),我同时使用TCP和UDP发送实时消息(TCP用于需要可靠性的消息,例如玩家死亡),我的服务器端是用python编写的,服务器使用Twisted。我经常需要快速发送小数据包,禁用数据包排队(Nagle的算法)应该有助于让数据包更快到达。我对twisted做了一些研究,发现这个设置在twisted中的abstract.FileDescriptor下(文档链接:http://twist

tcp - 类似 Nagle 的问题

所以我有了这个实时游戏,C++服务器使用SFMLlibrary禁用了nagle,和客户端使用asyncsocket,也禁用nagle。我每1秒发送30个数据包。从客户端发送到服务器没有问题,但是当从服务器发送到客户端时,一些数据包正在迁移。例如,如果我在完全不同的数据包中发送“a”和“b”,客户端会将其读作“ab”。它只发生一次,但它在游戏中造成了一个真正的问题。那我该怎么办呢?我该如何解决?也许这是服务器中的东西?也许操作系统设置?需要说明的是:我没有使用nagle,但我仍然遇到这个问题。我在客户端和服务器中都禁用了。 最佳答案

networking - Nagle 算法和延迟确认

我在Linux(Ubuntu)上工作。我理解这两个概念,但我想自己阅读逻辑。源码写在什么地方?有人说在FreeBSD中更容易理解。是真的吗? 最佳答案 我不知道FreeBSD,但Nagle算法是在Linux内核下定义的:https://github.com/torvalds/linux/blob/master/net/ipv4/tcp_output.c使用静态函数:tcp_nagle_check。希望这对您有所帮助。问候。 关于networking-Nagle算法和延迟确认,我们在Sta

language-agnostic - Nagle 算法和延迟 ACK 是否影响 TCP 连接设置?

客户端的SYN和服务器的SYN+ACK是否被Nagle延迟了?客户端对服务器SYN的ACK是否会延迟?连接会在rtt+spt之后返回还是需要rtt+spt+2xNagle延迟?或者更一般地说,Nagle算法和延迟ACK如何影响TCP连接设置? 最佳答案 不,NAGLE不影响SYN或SYN+ACK。延迟的ACK也没有(从逻辑上讲,您希望SYN+ACK尽快返回,并且无论如何都不存在导致延迟的拥塞状态)。 关于language-agnostic-Nagle算法和延迟ACK是否影响TCP连接设置

tcp - tcp/ip中的Nagle算法

你能举例说明一下tcp/ip中nagle算法的概念吗? 最佳答案 我认为Wikipedia在开头的段落中做得很好。Nagle'sdocument,CongestionControlinIP/TCPInternetworks(RFC896)describeswhathecalledthe'smallpacketproblem',whereanapplicationrepeatedlyemitsdatainsmallchunks,frequentlyonly1byteinsize.SinceTCPpacketshavea40bytehe

algorithm - Nagle 算法、ACK 延迟和 Rlogin 回显

我也被建议在这里问,因为关于协议(protocol)的具体问题是主题,但如果有人感兴趣,这个问题也有一个小赏金ServerFault.我正在阅读有关TCP数据流、延迟ACK和Nagle算法的内容。到目前为止我的理解是:TCP上的DelayedACK实现对接收到的段的确认产生了延迟,从而使应用程序有机会在确认的同时写入一些数据,从而避免发送空的ACK数据包并有助于网络拥塞。Nagle的算法实现声明您不能发送一个小的TCP段,而另一个小段仍未被确认。这避免了流量加载多个tinygrams。在某些交互式应用程序中,例如Rlogin,Nagle算法和延迟确认可能会“冲突”:Rlogin在我们键

networking - Nagle 算法和延迟 ACK 是否用于批量数据?

因此,当我遇到Nagle的算法和针对小型数据包(1字节数据)的延迟ACK时,我正在研究TCP。原因是,避免在网络上发送大量小数据包(Nagle)和搭载数据(DelayedACK)。然而,没有提到这些用于批量数据的算法,即我写了>8000字节。4个问题:这些算法是否只适用于小数据包?例如,当我们写(8000)时,TCP首先发送1500字节(假设1500为MSS并且正在发生慢启动),在第一次收到ACK之前,它可以发送另一个1500字节的数据,那么是不是违反了Nagle的规定?接收方是等待超时发送延迟ACK还是在收到1500字节数据后立即发送?它如何知道何时延迟ACK?它是基于其接收缓冲区中

tcp - TCP Nagle 刷新发生了什么?

根据thisSocketFAQarticle,Nagle的算法是许多算法中的一种,它可以导致一堆数据位于TCP缓冲区中,而不是到达线路。Nagle算法的延迟最高可达200毫秒。出于某种原因,Nagle的算法可以完全关闭,但不会只刷新一次。这真让我费解。为什么没有办法说“就这一次,不要等待任何更多数据。就好像Nagle的200ms已到。”这难道不是很合理,并且在完全不使用Nagle、始终使用Nagle和从头实现自己的协议(protocol)之间取得良好的平衡吗? 最佳答案 好问题。我想没有人真的需要它,或者他们绕过了它。如果我没记错的

javascript - 使用 webSockets 避免 Nagle 算法影响的最佳方法?

我正在使用webSockets将javascriptwebSocket客户端连接到javawebSocketServer(来自Android应用程序),使用Java-WebSocket图书馆。Android应用每隔几毫秒向javascript客户端发送一条小消息。针对这种情况使用基本(和直观)方法,在javascript客户端内部测量的接收消息之间的延迟显示(近似)以下模式:200毫秒、0.1毫秒、0.1毫秒、0.1毫秒、0.1毫秒、0.1毫秒、0.1毫秒、200毫秒、0.1毫秒、0.1毫秒、0.1毫秒、0.1毫秒、0.1毫秒、0.1毫秒、200毫秒、0.1毫秒、0.1毫秒,0.1毫秒

Java 和 Nagle 插图

我试图在一个简单的客户端-服务器程序中说明Nagle算法。但我不太明白,也无法将其清楚地打印给我。在我的示例中,客户端只是生成从1到1024的整数并将它们发送到服务器。服务器只是将这些int转换为十六进制字符串并将它们发送回客户端。我所做的几乎所有更改都以相同的结果结束。int以256个int的block的形式发送和重新发送..我在两侧尝试了setTcpNoDelay(true)以查看更改,但这在我的控制台中给出了相同的结果。(但不是在wireshark中,我发现服务器和客户端之间发送的数据包数量有很大差异)但我的目标是能够在控制台中看到它,我猜有一些ObjectOutputStrea