2

このnode.js用の小さなサーバーを検討してください

var net = require ('net');

var server = net.createServer(function (socket) {

    console.log("Connection detected");

    socket.on('end', function() {
        console.log('server disconnected');
    });

    socket.write("Hello World");
    socket.end();
});

server.listen("8888");

Macbook Pro で Chrome を使用してサーバーをテストすると、コンソールに「接続が検出されました」というメッセージが 3 回表示されます。

1 つはよく接続するためのもの、もう 1 つはファビコンのためのものですが、3 番目のものは一体何なのでしょうか?

4

1 に答える 1

5

Firefox とwget(Linux コマンド ライン プログラム) でテストし、詳細調査telnetを行いました。驚くべきことに、これらはすべて追加の接続を行いません (明らかに、ファビコンをダウンロードしようとさえしません)。そのため、Wireshark を起動してセッションをキャプチャしたところ、Chorme が体系的に無駄な接続を行っていることがすぐにわかりました。SYNSYN-ACKACKRSTACK

簡単なグーグルで、このバグレポートを見つけました(抜粋):

「空の」TCP接続は

  1. バックアップ TCP 接続、
  2. IPv4/IPv6 並列接続、または
  3. TCP 事前接続、

バックアップ TCP 接続は、元の TCP 接続が 250 ミリ秒以内に設定されない場合にのみ作成されます。IPv4/IPv6 並列接続は、サーバーに IPv6 アドレスと IPv6 アドレスの両方があり、IPv6 接続が 300 ミリ秒以内にセットアップされない場合にのみ作成されます。localhost:8080 でローカル サーバーをテストしているので、すぐに接続できるはずなので、TCP 事前接続が表示されていると思われます。

「空の」TCP 接続が TCP 事前接続であるかどうかを確認するには、「レンチ」メニュー > [設定] > [フードの下] > [プライバシー] を開き、[ネットワーク アクションを予測してページの読み込みパフォーマンスを向上させる] チェック ボックスをオフにします。Chrome をシャットダウンして再起動します。「空の」TCP 接続はなくなりましたか?

詳細については、リンクされたスレッドを参照してください。このスレッドでは、バックアップ、並列、および事前接続とは何か、およびこれが適切な最適化である場合とその理由について詳しく説明しています。

于 2012-12-04T18:10:25.203 に答える