我正在处理通过非常慢的网络连接路由给我的时间紧迫的消息。我正在使用 Java TCP/IP 套接字连接到原始服务器(我无法控制)。数据的长度不同,但通常约为 5000 字节,因此最终会分成大约 1400 字节的多个数据包。
在我的 Java 客户端代码中有什么方法可以控制用于向我发送数据的数据包的大小?我想尝试显式地使用较小的数据包大小,例如 500 字节数据包,这将减少我接收消息第一个字节所需的时间,但(可能)会增加标头开销。
您可以尝试在少量字节后刷新SocketOutputStreams。这应该会创建更小的数据包——因为它取决于系统——但不能保证。
我们发现解决初始读取延迟的一种方法是在客户端请求的 TCP/IP 标头中设置 PUSH 或 URG 标志。据我所知,标准的 Java 套接字库不允许您这样做,但有一个库位于:
http://www.savarese.org/software/vserv-tcpip/
显然是这样。
免责声明:这是很久以前的事了(我认为是 Java 1.1.8),我们只在 Windows 上使用过它,我怀疑这也是一种 hack,所以它可能不再起作用。而且我也没有使用过 Savarese 库,所以不能保证。
如果想减少接收第一条数据的时间,可以尝试设置 Socket.setTcpNoDelay(true); setTcpNoDelay