5

この Socket FAQ articleによると、Nagle のアルゴリズムは、多数のデータを TCP バッファに保持させ、ネットワークにヒットさせないアルゴリズムの 1 つです。Nagle アルゴリズムによる遅延は最大 200 ミリ秒です。

何らかの理由で、Nagle のアルゴリズムを完全にオフにすることはできますが、一度だけフラッシュすることはできません。これは本当に不可解です。なぜ「今回だけ、これ以上のデータを待たずに、ネーグルの 200 ミリ秒が経過したかのように振る舞う」と言う方法がないのはなぜですか。

それは完全に理にかなっており、Nagle をまったく使用しない、常に Nagle を使用する、および独自のプロトコルをゼロから実装することとの間でバランスが取れているのではないでしょうか?

4

2 に答える 2

1

良い質問。誰も本当にそれを必要としたり、回避したりしたことはないと思います。私の記憶が正しければ、有効TCP_NODELAYにするとすぐにデータがプッシュされます。次に、それを無効にすることができます。

もちろん、これには「フラッシュ」のための 2 つのシステム コールという高いコストがかかります。あなたができること: send(2)、Unix 実装ではflags引数があります。次のような独自のフラグを実装できますMSG_JUSTPUSHIT(わかりました、別の名前かもしれません) tcp_output

于 2011-07-17T21:31:24.990 に答える