1

私のサーバー側では、書き込み可能なストリームを使用して、サーバーに接続されているすべてのクライアントの変化するデータを記録します。ここに私が書いたものがあります:

function updateLoop () {
    var data = {'timeStep': timeStep, 'playerInfo': playerInfo};
    var text = JSON.stringify(data);
    writeStram.write(text + '\n');
    timeStep += 1;
}
...
updateTimer = setInterval(updateLoop, 50);

したがって、関数 updateLoop() は 50 ミリ秒ごとに呼び出されます。

「playerInfo」が小さい (1KB 未満) 場合に機能します。たとえば、サーバー側が 20 秒間実行された後、出力ファイルに 20*1000/50 = 400 行のデータがあります。

しかし、「playerInfo」が 6KB 以上になると、サーバー側が 20 秒間実行された後、出力ファイルには 220 行のデータしかありません。playerInfo が大きいほど、出力ファイルに正常に記録されたデータの行が少なくなります。

メソッド write() の呼び出しレートに何らかの制限があるかどうか疑問に思っています

皆さんの助けに感謝します!

4

1 に答える 1

3

問題は特にwriteではなくsetInterval、JavaScript でタイマーがどのように機能するかにあると思われます。

データが大きいほどupdateLoop、設定された 50 ミリ秒の遅延よりも実行が完了するまでに時間がかかる可能性があります。間隔が互いにオーバーラップするのに十分な時間がかかる場合、別の間隔が既に待機しているときにイベント キューに追加される場合、新しい間隔がスキップ (または「削除」) されます。

node.jsの書き込み可能なストリームのメソッドwrite()はどのくらいの速さで呼び出せますか?

writeパフォーマンスを明示的に調整するべきではありませんが、ノードがコンピューターで達成できる全体的なパフォーマンスによって制限される可能性があります (CPU、RAM などの影響を受けます)。

のパフォーマンスをベンチマークし、updateLoopさまざまな量のと比較する必要がありますplayerInfo。これに使用できるパッケージがいくつかありbenます。

ben(1000, updateLoop, function (ms) {
    console.log(ms, 'milliseconds per iteration');
});
于 2012-09-21T02:37:26.853 に答える