NodeJS socket onData事件,一个数据对象中有两个数据包?

时间:2016-02-25 16:11:27

标签: json node.js sockets tcp

我正在尝试使用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
});

1 个答案:

答案 0 :(得分:0)

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