[英]how can I transfer large data over tcp socket
如何在不拆分的情况下传输大数据。 我正在使用 tcp 套接字。 它的游戏。 我不能使用 udp,数组中可能有 1200 个值。 我正在以 json 格式发送数组。 但是服务器接收它就像分裂一样。
还有什么选项可以像tcp一样发送http请求? 我需要按顺序回复。 它也应该更快。
谢谢,
你不能。
这里没有问题需要解决。
您对拆分数据包/数据报没有太多控制权。 网络决定了这一点。
在 IP 的情况下,您有 DF(不分段)标志,但我怀疑它在这里会有多大帮助。 如果您通过以太网进行通信,那么 1200 个元素的阵列可能不适合以太网帧(有效负载大小高达 1500 个八位字节的 MTU)。
为什么您的应用程序依赖于整个数据必须在单个单元中而不是在单个连接(可能由多个单元组成)中到达这一事实?
考虑问题可能出在其他地方或您可能发送过多不必要数据的想法。 在 PHP 示例中,有isset()
函数。 如果您正在创建基于互联网的回合制游戏,则不需要(每次都需要来回发送所有 1,200 个变量。只需发送更改的内容,当其他玩家收到该数据时,仅更改设置的变量。
如何在不拆分的情况下传输大数据。
我将上述解释大致等同于“如何使用尽可能少的 TCP 数据包通过 TCP 连接传输我的数据”。 正如其他人所指出的,无法保证您的数据将被放入单个 TCP 数据包中——但您可以做一些事情来使其更有可能。 以下是我会做的一些事情:
请注意,即使在您完成上述所有操作之后,TCP 层有时仍会将您的消息传播到多个数据包等中——这就是 TCP 的工作方式。 即使您的本地 TCP 堆栈从未这样做,接收计算机的 TCP 堆栈有时仍会将来自连续 TCP 数据包的数据合并到其接收缓冲区中。 所以接收程序有时总是会“像拆分一样接收”,因为 TCP 是基于流的协议,不维护消息边界。 (如果你想要消息边界,你必须自己做帧——最简单的方法通常是在每条消息之前发送一个固定大小(例如 1、2 或 4 字节)的整数字节计数字段,所以接收方知道在解析完整消息之前需要读入多少字节)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.