Node.js の応答時間 >= 200ms?
-
28-10-2019 - |
質問
Node.js ワークロード テストに取り組んでいますが、興味深い動作に遭遇しました。HTTP サーバーの最小応答時間は、最も単純なロジックの場合でも 200 ミリ秒です。
var http = require("http");
http.createServer(function(request, response) {
response.write("Hello World");
response.end();
}).listen(8080);
Windows Server 2003 上で実行:
> node main.js
Web を検索しましたが、これに関する情報は見つかりませんでした。テストはローカル ネットワーク上で行われ、さらに他の Web サーバー (つまり IIS) を使用すると、即時の応答時間を実現できます。誤解しないでください。この動作の背後には合理的な説明があるため、これが私の質問です。
これは? デフォルトの動作 それはnode.jsに付属しているのでしょうか、それとも他の何かの結果でしょうか?
要求に応じて説明:
- ノードjsのバージョン:0.6.11
- OS:Windows Server 2003 R2 SP2
- サーバー環境:VMWare ワークステーション 8.0.0
- ワークロードユーティリティ:jMeter 2.6 (1 スレッドのワークロード)
アップデート
遅延動作はリモート要求中にのみ表示されます。ローカル ワークロード テストが実行される場合、待ち時間はゼロに近くなります。ただし、同じサーバー上の IIS に対するリモート要求では遅延が発生しないため、ネットワーク遅延の問題である可能性はありません。他のOSでも試してみます。
解決
これは、Windows でデフォルトで設定されている Nagle アルゴリズムです (Azure 上の Windows 2008 R2 でも再現可能です)。
回避策 - 次のように、応答ソケットで無効にします。
response.connection.setNoDelay(true);
他のヒント
ここでは 5 ミリ秒のレイテンシー、3 ミリ秒のダウンロード、合計 8 ミリ秒が得られます。状況によって異なりますが、私が確認した最高値は合計約 14 ミリ秒です。
ただしOS X 10.7.3でも動作しました。Windows で試して確認する必要があります。
Ubuntu 64ビットとノードバージョン0.6.10を実行していますが、最大で20ミリ秒の遅延が発生します。これは Windows の問題だと思います。Windows では Node がまだ完璧ではないため、もう少し安定するまで待つ必要があります。問題をメーリング リストに投稿することをお勧めします。