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();
我尝试找到SocketOutputStream上flush操作的实际作用,但据我所知,它并没有做任何事情。我曾希望它能告诉套接字“立即发送所有缓冲数据”,但很不幸,它无法做到。
我的问题是:这三个字节数组会被一起发送吗?我知道您对TCP如何构建网络数据包没有太多控制权,但有没有办法告诉套接字(至少尝试)将这些字节数组打包在一起,以避免网络开销?手动打包字节数组并在一次调用中发送它们是否有所帮助?