【问题标题】:Writes and 'data' events in node.js sockets在 node.js 套接字中写入和“数据”事件
【发布时间】:2017-01-25 14:05:25
【问题描述】:

当通过 node.js 套接字传递数据时,谁来确保数据被完整地接收/读取?调用者还是 node.js?

每次写入是否对应一个“数据”事件?我是否需要明确检查以确保接收到的数据长度与写入的内容相对应?换句话说,我是否必须维护一个长度标头?

【问题讨论】:

  • websockets 自己管理,如果这就是你要问的。
  • node.js的sockets都是websockets吗?
  • 如果这是您要求的,则无法保证交货。您有更具体的问题可以用代码说明吗?
  • @AgnelKurian:不,一点也不。 sockets 是一个通用的低级事物,通常是 tcp。 WebSockets 是一种(稍微)更高级别的协议,具有交付保证、错误处理、指定压缩等。

标签: javascript json node.js sockets serialization


【解决方案1】:

当你执行一个写命令时: socket.write(data[, encoding][, callback]), callback 参数将在数据最终写出时执行 - 这可能不会立即执行。

单个写入命令可能会导致一系列data 事件:

const readable = getReadableStreamSomehow();
readable.on('data', (chunk) => {
// chunk.length bytes of data received
});

接收者需要通过检查所有接收到的块的长度来确保它接收到整个 Buffer/String。这将需要有一个长度标题或类似的标记。

附:上面的答案适用于 TCP 之类的套接字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2013-08-21
    • 2012-09-06
    相关资源
    最近更新 更多