0

我有一个设备可以非常快地向 Windows XP 操作系统发送具有 1440 字节有效负载的 TCP 数据包。我将 TcpAckFrequency 设置为 0,即收到包后立即发回 ACK。我编写了一个 Java 应用程序,它在线程中读取套接字:

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
in.read(charArray, 0, 720);

我的问题是Windows缓冲区在收到一些(50-60)数据包后变满,然后发送一个DUP ACK,这会减慢通信速度。

我不明白为什么它会变满,因为我总是在读取缓冲区?

4

1 回答 1

1

一种可能的解释是 Java 应用程序无法跟上。换句话说,它无法在设备发送数据时以最快的速度处理数据。如果这是问题所在,您必须想出一个解决方案,让应用程序更快地处理数据。

如果您有多个内核,则可以通过重构 Java 应用程序以使用一个线程从套接字读取数据并使用另一个线程(或多个线程)进行处理来获得更好的吞吐量。

另一种解决方案可能只是对 Java 应用程序进行概要分析,以查看是否有调整优化的空间。

最后,您可以通过为BufferedReader.

于 2012-04-18T12:26:23.710 回答