質問

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 がまだ完璧ではないため、もう少し安定するまで待つ必要があります。問題をメーリング リストに投稿することをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top