【问题标题】:Detect complete data received on 'data' Event in Net module of Node.js检测 Node.js 的 Net 模块中的“数据”事件接收到的完整数据
【发布时间】:2020-03-13 12:18:39
【问题描述】:

目前,当我们通过 TCP 发送大数据时,data 事件会以块的形式接收它。有没有办法让我们能够检测到所有数据都已接收并返回完整数据。

【问题讨论】:

    标签: javascript node.js sockets tcp


    【解决方案1】:

    目前,当我们通过 TCP 数据事件发送大数据时,会分块接收它。有没有办法让我们能够检测到所有数据都已接收并返回完整数据。

    TCP 只是一个连续的数据流。除非您关闭连接并将关闭的连接用作数据完成的信号,否则 TCP 级别的给定传输没有开始或结束。

    因此,如果您想知道给定的数据块在哪里开始和停止,您需要在发送的数据中设计一种方法以便知道这一点(本质上是构建您自己的小型迷你有线格式或协议)。有无数种不同的方法可以做到这一点,这也是我们在 TCP 之上构建了如此多不同协议的原因之一。两个最简单的方案是:

    1. 发送一定长度的数据包,然后发送那么多字节。然后接收者读取长度并知道什么时候读取了那么多字节,它拥有整个块。

    2. 使用某种不会出现在实际数据中的分隔符。例如,一些简单的协议使用换行符作为分隔符。您发送一堆文本,然后用换行符终止它。接收者读取数据,直到他们得到一个换行符,这告诉他们他们有一个完整的数据块。根据数据的类型,有许多可能的分隔符。

    其他协议(例如 webSocket 或 socket.io)内置了基于消息的范例,为您完成这项工作。您在一端发送一条消息,然后在另一端接收整条消息。

    根据您发送的数据类型(文本/二进制)、数据的长度以及数据的字符(是否存在可能的分隔符),某些选项或多或少是合适的在实际数据中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多