問題は、ネットソケットを介して大規模なシリアル化されたJSON(16,000文字以上)をチャンクに分割することです。各チャンクは、受信側のdata
イベントを起動します。したがって、受信データでJSON.parse()
を単に実行すると、SyntaxError: Unexpected end of input
で失敗することがあります。ノード - ネットソケットを介して大きなJSONを送信
私がこれまで考えてきたことは、シリアライズされたJSONの末尾にヌル文字('\u0000'
)を追加し、受信側でそれを確認することです。ここでの例である:このモデルの失敗の
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ファイルを送信しています。
同じボックスで実行されている2つのプロセス間でデータを渡す必要があるため、ポートを使用しない方が望ましいからです。したがって、ネットソケットを使用します。したがって、2つの質問があります:まず、2つのNode.jsプロセス間で大きなJSONデータをすばやく渡すためのより良い方法がありますか?次に、これが最善の方法であれば、シリアル化されたJSONが送信されたときに分割されているケースをどうすれば処理できますか?
好奇心が...あなたはソケット接続とHTTPのどちらかでこれをしたいですか? –
は、1つのソケットファイルブロードキャスターを持っています。データを取得して(例えばデータベースに送る、ブラウザーでグラフを送るなど)、データを取得する多くの「リスナー」を作成できます。 1つのNode.jsプロセスからより多くのNode.jsプロセスにデータをより確実に送信する方法はすべて公開されています。応答のために –