问题是通过网络套接字发送大型序列化 JSON(超过 16,000 个字符)会被分成块。每个块都会data
在接收端触发事件。因此,简单地JSON.parse()
在传入数据上运行可能会失败SyntaxError: Unexpected end of input
。
到目前为止,我设法提出的解决方法是将一个空字符 ( '\u0000'
) 附加到序列化 JSON 的末尾,并在接收端检查它。这是一个例子:
var partialData = '';
client.on( 'data', function( data ) {
data = data.toString();
if ( data.charCodeAt( data.length - 1 ) !== 0 ) {
partialData += data;
// if data is incomplete then no need to proceed
return;
} else {
// append all but the null character to the existing partial data
partialData += data.substr( 0, data.length - 1 );
}
// pass parsed data to some function for processing
workWithData( JSON.parse( partialData ));
// reset partialData for next data transfer
partialData = '';
});
该模型的失败之一是接收器连接到多个套接字,并且每个套接字都在发送大型 JSON 文件。
我这样做的原因是因为我需要在同一个盒子上运行的两个进程之间传递数据,而且我不喜欢使用端口。因此使用网络套接字。所以会有两个问题:首先,有没有更好的方法在两个 Node.js 进程之间快速传递大量 JSON 数据?其次,如果这是最好的方法,那么我怎样才能更好地处理序列化的 JSON 在发送时被分成块的情况?