TCP ソケットを使用して通信するクライアント/サーバーを実装しました。ソケットに書き込んでいるデータは、文字列化された JSON です。最初はすべてが期待どおりに機能しますが、書き込み速度を上げていくと、最終的に JSON 解析エラーが発生し、クライアントの最初の部分が古い書き込みの最後に新しい書き込みの始まりを受け取ることになります。
サーバーコードは次のとおりです。
var data = {};
data.type = 'req';
data.id = 1;
data.size = 2;
var string = JSON.stringify(data);
client.write(string, callback());
クライアントサーバーでこのコードを受け取る方法は次のとおりです。
client.on('data', function(req) {
var data = req.toString();
try {
json = JSON.parse(data);
} catch (err) {
console.log("JSON parse error:" + err);
}
});
レートが上がると発生するエラーは次のとおりです。
SyntaxError: Unexpected token {
これは、現在のリクエストの終わりにタグ付けされている次のリクエストの始まりのようです。
使ってみました; 各 JSON リクエストの末尾に区切り文字として使用し、次を使用します。
var data = req.toString().substring(0,req.toString().indexOf(';'));
ただし、このアプローチでは、JSON 解析エラーが発生する代わりに、書き込み速度が 1 秒あたり 300 を超えると、クライアント側で一部の要求が完全に失われるようです。
TCP ソケットを介して着信要求を区切るためのベスト プラクティスまたはより効率的な方法はありますか?
ありがとう!