当前,当我们通过TCP发送大数据时,数据事件将以块的形式接收它。有没有一种方法可以让我们检测到所有数据都已接收并返回完整的数据。
当前,当我们通过TCP发送大数据时,数据事件将以块的形式接收它。有没有一种方法可以让我们检测到所有数据都已接收并返回完整的数据。
TCP只是一个连续的数据流。TCP级别的给定传输没有开始或结束,除非您关闭连接并使用关闭的连接作为数据完成的信号。
因此,如果你想知道给定的数据块从哪里开始和停止,你需要在发送的数据中设计一种方式来知道这一点(本质上是建立你自己的小型有线格式或协议(。有无数种不同的方法可以做到这一点,这也是我们在TCP之上构建了许多不同协议的原因之一。两个最简单的方案是:
-
发送数据包的长度,然后发送那么多字节。然后,接收方读取长度,并知道当它读取那么多字节时,它就拥有了整个块。
-
使用某种不会出现在实际数据中的分隔符。例如,一些简单的协议使用换行符作为分隔符。你发送了一堆文本,然后用换行符终止它。接收方读取数据,直到他们得到换行符,然后告诉他们有一个完整的数据块。根据数据的类型,有许多可能的分隔符
其他协议,如webSocket或socket.io,都内置了基于消息的范例,为您完成这项工作。你在一端发送一条信息,然后在另一端接收一整条信息。
根据您发送的数据类型(文本/二进制(、数据长度以及数据的字符(实际数据中是否存在可能的分隔符(,有些选项或多或少是合适的。