通过socket发送一个大数据包比发送几个小数据包好吗?JAVA
我正在制作一个服务器/客户机程序,通过socket将2个类和2个整数从客户机发送到服务器,然后再从服务器发送回客户机(依此类推)。这需要相对较长的时间,而且这个过程是在游戏循环中进行的,这会使事情变得缓慢。我的问题是:发送这些东西的最快方式是什么
- 打包所有这些东西(每次我需要的时候),然后将那个大数据包发送到服务器,然后再发送回来(然后解压缩数据)李>
- 把这些东西一件一件地寄回去。这将节省打包所有这些东西所需的时间(我想)李>
- 或者这两种方法之间根本没有区别李>
你们怎么看?在这种过程中,有没有其他加快速度的方法
编辑1:我正在使用TCP
# 1 楼答案
所列选项之间的选择取决于所开发应用程序的用途和类型(文本、发送统计数据等)。一般来说在这种情况下,强烈建议使用同步线程,是的,在网络上发送少量数据无疑会提高传输速度,但这将在服务器端“生成”更多编码,因为您需要序列化(因为您使用的是类对象)并在操作数据之前重新排序数据的方法
# 2 楼答案
我想说的是选择一包。将多个项目放入缓冲区的成本相对较低,而将数据块传输到网络堆栈上的成本相对较低。使事情按块进行往往会得到IP窗口,这样就可以调整到更大的块,因此它们的流动速度往往比通过网络路由多个数据包更快
# 3 楼答案
请记住,当您使用TCP(http、https、ftp、rsync等使用的网络传输协议)时,应用程序发送的数据被视为有序字节流,而不是单个消息——换句话说,数据被视为字节序列,而不是数据的“块”或“块”
根据TCP堆栈实现及其配置(例如Linux发行版上的TCP_NODELAY或TCP_CORK),内核接收的小数据段可能会被缓冲,直到可以发送一个MSS的数据(通常为1460字节),或者数据可能会立即发送,不管应用程序如何努力控制网络数据包大小
无论如何,这取决于你所说的“更好”是什么意思。您是否在尝试优化响应能力或可扩展性