有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

通过socket发送一个大数据包比发送几个小数据包好吗?JAVA

我正在制作一个服务器/客户机程序,通过socket将2个类和2个整数从客户机发送到服务器,然后再从服务器发送回客户机(依此类推)。这需要相对较长的时间,而且这个过程是在游戏循环中进行的,这会使事情变得缓慢。我的问题是:发送这些东西的最快方式是什么

  • 打包所有这些东西(每次我需要的时候),然后将那个大数据包发送到服务器,然后再发送回来(然后解压缩数据)
  • 把这些东西一件一件地寄回去。这将节省打包所有这些东西所需的时间(我想)
  • 或者这两种方法之间根本没有区别

你们怎么看?在这种过程中,有没有其他加快速度的方法

编辑1:我正在使用TCP


共 (3) 个答案

  1. # 1 楼答案

    所列选项之间的选择取决于所开发应用程序的用途和类型(文本、发送统计数据等)。一般来说在这种情况下,强烈建议使用同步线程,是的,在网络上发送少量数据无疑会提高传输速度,但这将在服务器端“生成”更多编码,因为您需要序列化(因为您使用的是类对象)并在操作数据之前重新排序数据的方法

  2. # 2 楼答案

    我想说的是选择一包。将多个项目放入缓冲区的成本相对较低,而将数据块传输到网络堆栈上的成本相对较低。使事情按块进行往往会得到IP窗口,这样就可以调整到更大的块,因此它们的流动速度往往比通过网络路由多个数据包更快

  3. # 3 楼答案

    请记住,当您使用TCP(http、https、ftp、rsync等使用的网络传输协议)时,应用程序发送的数据被视为有序字节流,而不是单个消息——换句话说,数据被视为字节序列,而不是数据的“块”或“块”

    根据TCP堆栈实现及其配置(例如Linux发行版上的TCP_NODELAY或TCP_CORK),内核接收的小数据段可能会被缓冲,直到可以发送一个MSS的数据(通常为1460字节),或者数据可能会立即发送,不管应用程序如何努力控制网络数据包大小

    无论如何,这取决于你所说的“更好”是什么意思。您是否在尝试优化响应能力或可扩展性