2

我正在处理通过非常慢的网络连接路由给我的时间紧迫的消息。我正在使用 Java TCP/IP 套接字连接到原始服务器(我无法控制)。数据的长度不同,但通常约为 5000 字节,因此最终会分成大约 1400 字节的多个数据包。

在我的 Java 客户端代码中有什么方法可以控制用于向我发送数据的数据包的大小?我想尝试显式地使用较小的数据包大小,例如 500 字节数据包,这将减少我接收消息第一个字节所需的时间,但(可能)会增加标头开销。

4

4 回答 4

2

如果您无法控制或更改服务器,我认为您无法从客户端控制它。我怀疑服务器正在将数据打包到一个 1500 字节的以太网帧中(有关详细信息,请参见此处)并尝试优化其向您的数据传递。

这 1500 个字节称为MTU。你可以在操作系统层玩这个,但我怀疑这只会给你带来悲伤。

于 2009-03-16T10:11:33.770 回答
1

您可以尝试在少量字节后刷新SocketOutputStreams。这应该会创建更小的数据包——因为它取决于系统——但不能保证。

于 2009-03-16T10:05:20.227 回答
1

我们发现解决初始读取延迟的一种方法是在客户端请求的 TCP/IP 标头中设置 PUSH 或 URG 标志。据我所知,标准的 Java 套接字库不允许您这样做,但有一个库位于:

http://www.savarese.org/software/vserv-tcpip/

显然是这样。

免责声明:这是很久以前的了(我认为是 Java 1.1.8),我们只在 Windows 上使用过它,我怀疑这也是一种 hack,所以它可能不再起作用。而且我也没有使用过 Savarese 库,所以不能保证。

于 2009-03-16T10:16:18.547 回答
0

如果想减少接收第一条数据的时间,可以尝试设置 Socket.setTcpNoDelay(true); setTcpNoDelay

于 2009-03-16T21:50:59.127 回答