2016-02-25 20 views
0

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

因为我在数据字符串中有两个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 
}); 

回答

0

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

相关问题