如何在不拆分的情况下传输大数据。我用的是tcp socket。它适合游戏。我不能使用udp,数组中可能有1200个值。我以json格式发送数组。但接收它的服务器就像拆分一样。
还有什么选项可以像tcp一样发送http请求吗?我需要按顺序回复。它也应该更快。
谢谢,
答案 0 :(得分:1)
您无法控制拆分数据包/数据报。网络决定这一点。
在IP的情况下,你有DF(不碎片)标志,但我怀疑它在这里会有多大帮助。如果您通过以太网进行通信,则1200元素阵列可能无法插入以太网帧(有效负载大小最大为1500个八位字节的MTU)。
为什么您的应用程序依赖于整个数据必须到达单个单元而不是单个连接(可能由多个单元组成)的事实?
答案 1 :(得分:1)
你不能。
这里没有问题需要解决。
答案 2 :(得分:1)
考虑一下这个问题可能是您可能在哪里发送过多不必要的数据。在PHP的示例中,有isset()
函数。如果您正在创建基于互联网的回合制游戏,则不要(需要每次都来回发送所有1,200个变量。只需发送更改的内容,当其他玩家收到该数据时,仅更改变量是 set 。
答案 3 :(得分:0)
如何在不拆分的情况下传输大数据。
我正在解释上述内容大致相当于“如何使用尽可能少的TCP数据包通过TCP连接传输数据”。正如其他人所指出的那样,保证无法将您的数据放入单个TCP数据包中 - 但您可以做一些事情来使其更有可能。以下是我要做的一些事情:
请注意,即使在完成上述所有操作之后,TCP层仍然有时会将您的消息传播到多个数据包等 - 这就是TCP的工作方式。即使您的本地TCP堆栈从未这样做,接收计算机的TCP堆栈仍然有时会将连续TCP数据包中的数据合并到其接收缓冲区内。因此,接收程序有时总是“像分裂一样接收它”,因为TCP是基于流的协议,并且不保持消息边界。 (如果你想要消息边界,你必须自己做框架 - 最简单的方法通常是在每条消息之前发送一个固定大小(例如1,2或4字节)的整数字节计数字段,所以接收器知道在解析完整消息之前需要读入多少字节