gpt4 book ai didi

sockets - 用 Java 套接字重现写-写-读延迟

转载 作者:可可西里 更新时间:2023-11-01 02:34:46 24 4
gpt4 key购买 nike

我读到过,三件事的结合会导致 TCP 大约 200 毫秒的延迟:Nagle 算法、延迟确认和“写入-写入-读取”组合。但是,我无法使用 Java 套接字重现这种延迟,因此我不确定我是否理解正确。

我正在使用 Java 7 在 Windows 7 上运行测试,其中两个线程使用环回地址上的套接字。我没有触及任何套接字上的 tcpNoDelay 选项(默认情况下为 false),也没有使用操作系统上的任何 TCP 设置。客户端中的主要代码如下。服务器在从客户端接收到每两个字节后用一个字节进行响应。

for (int i = 0; i < 100; i++) {
client.getOutputStream().write(1);
client.getOutputStream().write(2);
System.out.println(client.getInputStream().read());
}

我没有看到任何延迟。为什么不呢?

最佳答案

我相信您看到了延迟确认。您将 4 和 4 个字节写入套接字。服务器的 TCP 堆栈接收一个段(可能包含至少 4 个来自 int 数字的字节)并唤醒服务器应用程序线程。该线程将一个字节写回流中,并在 ACK 段内将该字节发送到客户端。 IE。 TCP 堆栈为应用程序提供了立即发送回复的机会。所以你看不到延迟。您可以编写流量转储,也可以在两台计算机之间进行实验,看看到底发生了什么。

关于sockets - 用 Java 套接字重现写-写-读延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14921160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com