问题标签 [nagle]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tcp - TCP Nagle 刷新发生了什么?
根据这篇 Socket FAQ 文章,Nagle 的算法是许多算法之一,它可以导致一堆数据位于 TCP 缓冲区中而不会发生在网络上。Nagle 算法的延迟最高可达 200 毫秒。
出于某种原因,Nagle 的算法可以完全关闭,但不能只刷新一次。这对我来说真的很令人费解。为什么没有办法说“就这一次,不要等待更多数据。就像Nagle的200ms到了一样。”
这难道不是很有意义,并且在根本没有 Nagle、一直 Nagle 和从头实现自己的协议之间取得很好的平衡吗?
tcp - 设置 TCP_NODELAY 会影响套接字两端的行为吗?
我一直认为 Nagle 的算法会在两个方向上影响套接字,并且该设置TCP_NODELAY
以某种方式通知远程端也关闭 Nagle。
是这样,还是设置TCP_NODELAY
只影响调用它的端的行为?
nagle - 禁用 TCP nagle 行为的风险是什么?
至少对于 Windows,默认情况下,Nagling 是打开的。关闭它可能会带来性能提升。关掉有什么坏处?
socket.io - socket.io 中的 nagle 算法
有谁知道在使用 socket.io 时如何配置 nagle 的算法(打开或关闭)?
这个选项甚至是随 socket.io 提供的吗?
我假设默认行为配置为使用 nagle 算法(如果我错了,请纠正我)。
理想情况下,我希望在不同应用程序中根据需要使用 socket.io 时配置 nagle 的算法(开/关) - 无论我可能使用哪个 Web/应用程序服务器。
谢谢!
javascript - 使用 socket.io 延迟
我开始使用 socket.io 进行网页游戏。
使用 nodejs express 服务器,我尝试编写简单的测试。在此测试中,服务器将时间戳写入客户端,客户端返回此时间戳。在此之后,服务器记录用于发送和返回的时间。
结果是:ping 500 毫秒 +- 10 毫秒。当我尝试在本地网络中的另一台计算机上执行此操作时,结果相同。
所以,我认为,由于 TCP Nagle 算法或类似的东西,延迟是如此之好。有谁知道如何告诉nodejs服务器刷新数据而无需等待?
服务器代码:
客户端代码:
networking - Nagle 算法和延迟确认
我正在使用 Linux(Ubuntu)。我理解这两个概念,但我想自己阅读逻辑。它在源代码中写在哪里?有人说在 FreeBSD 中更容易理解。真的吗?
.net - WCF/SOAP 中的 Nagle 算法是否有用?
我看过很多关于在 Azure 上工作时在 WCF 中禁用 Nagle 算法的帖子。我一直想知道这是否仅适用于 Azure,或者这是否应该是更通用的最佳实践。
正如各种来源所描述的,Nagle 算法基本上将小的 TCP 请求分批成一个更大的请求。批处理基于每个连接进行。
我在专业环境中看到的大多数 WCF 传输都是小数据块,由单个线程发送,并且主要是双向的。我知道这并不是 Nagle 算法的理想情况。
所以......我的结论是否正确,无论上下文如何,最好在使用 WCF 或 SOAP 时始终禁用它?
sockets - 在python中禁用nagle:如何以正确的方式做到这一点?
我需要在 python2.6 中禁用 nagle 算法。我发现以这种方式在 httplib.py 中修补 HTTPConnection
成功了。
显然,如果可能的话,我想避免修补系统库。所以,问题是:做这件事的正确方法是什么?(我对python很陌生,在这里很容易错过一些明显的解决方案)
sockets - 使用 Java 套接字重现写入-写入-读取延迟
我已经读过三件事的组合会导致 TCP 延迟 200 毫秒:Nagle 算法、延迟确认和“写-写-读”组合。但是,我无法使用 Java 套接字重现这种延迟,因此我不确定我是否理解正确。
我正在使用 Java 7 在 Windows 7 上运行测试,其中两个线程在环回地址上使用套接字。我没有触及任何套接字上的 tcpNoDelay 选项(默认为 false),也没有在操作系统上使用任何 TCP 设置。客户端中的主要代码如下。服务器在从客户端接收到的每两个字节后响应一个字节。
我没有看到任何延迟。为什么不?
boost-asio - 无法关闭 TCP_NODELAY
我正在使用 Boost asio 发送 TCP 消息。我设置了 NO_DELAY 选项,因为这是一个“实时”控制系统。我看到使用 Wireshark 在消息中设置了 PSH 标志。我对性能感到满意,并且它按预期工作。
出于兴趣,我决定关闭 NO_DELAY 并测量性能差异。
我交换了我现有的代码:
为了
我仍然看到设置了 PSH 标志。
我还尝试删除 set_option 代码并仍然看到它设置。
在 Wireshark 中,我看到:
其中 104 和 105 是我的 2 台 PC 的 IP 地址。我也很惊讶带有我的数据的消息有一个 ACK。
如何关闭 NO_DELAY?