TCP_NODELAY 是启用快速发送 TCP 数据包的选项,无论其大小如何。当速度很重要时,这是非常有用的选项,但是,我很好奇它将对此做什么:
Socket socket = [some socket];
socket.setTcpNoDelay(true);
OutputStream out = socket.getOutputStream();
out.write(byteArray1);
out.write(byteArray2);
out.write(byteArray3);
out.flush();
我试图找出 flush 在 a 上的实际作用SocketOutputStream
,但据我现在所知,它什么也没做。我曾希望它会告诉套接字“现在发送所有缓冲数据”,但不幸的是,它没有。
我的问题是:这些 3 字节数组是在一个数据包中发送的吗?我知道您对 TCP 如何构建网络数据包没有太多控制权,但是有没有办法告诉套接字(至少尝试)打包这些字节数组,从而避免网络开销?可以手动打包字节数组并在一次调用中发送它们以write
寻求帮助吗?