【问题标题】:NodeJS socket onData event, two packets in one data object?NodeJS套接字onData事件,一个数据对象中有两个数据包?
【发布时间】:2016-06-08 12:53:18
【问题描述】:

我正在尝试使用 TCP 将一些信息从我的服务器发送到我的客户端,并且它的格式为 JSON。我正在使用网络模块。当我的套接字对象发出“on data”事件时,我想将字节流转换为文本并用 json 解析它。问题是数据有时包含来自两个独立 TCP 包的数据。当服务器非常快速地发送数据时会发生这种情况。

因为我在数据字符串中有两个 JSON 字符串,所以我不能使用解析。我可以使用字符串操作,但这似乎是一个糟糕的解决方案。我知道这是两个独立的 TCP 包,由wireshark 确认。我该如何处理?

"use strict";
let net = require('net');
let client = new net.Socket();

var port = 8172;
var host = 'localhost';


client.connect({port: port, host:host}, () =>{
   console.log("Connected");
});

client.on('data',(data)=>{
    console.log(data.toString()); //I want to use JSON.parse() here
});

【问题讨论】:

    标签: json node.js sockets tcp


    【解决方案1】:

    问题在于流基础设施正在处理数据,并且它不会为每个网络数据包发出事件。我建议您将套接字流通过管道传输到使用特殊标记分隔消息的转换中(也许您可以在每条消息的末尾添加一个换行符)。或者您可以使用贡献的包进行 json 流处理。 Thisthis 可以给你一些想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-25
      • 2019-07-30
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多