0

スクリプトが完了するまでに1秒以上かかる場合、gwanがどのように応答するかを知りたいです。

そのために、次の例のsleep()関数を使用しました。hello.c

#include "gwan.h"  
#include <unistd.h>  

int main(int argc, char **argv)  
{  
    sleep(5);
    static char msg[] = "Hello, ANSI C!";  
    xbuf_ncat(get_reply(argv), msg, sizeof(msg) - 1);  
    return 200; // return an HTTP code (200:'OK')
}

Chromeから得た応答時間は、予想どおり5秒以上でした。

次に、Weighttp同時実行テストを実行しました。これは、Chromeから取得した応答時間(ミリ秒)です。
これはキャッシュの問題ですか?5秒の睡眠時間はどこに行ったのですか?ありがとう。

4

1 に答える 1

2

テストは(せいぜいsleep(5);)無意味であり、予想どおり、G-WANはブロッキングスクリプトをタイムアウトして、バグのあるスクリプトによるサーバーのブロックを回避します。

後で行ったように、ブロッキング サーブレットが同時実行で使用される場合、実行のたびに無意味にタイムアウトするのではなく (これには時間がかかります)、G-WAN はこのサーブレットにバグがあるとフラグを立てて実行しなくなります。

このブロッキングの問題は、より興味深いテストでは存在しません。G-WAN がブロックすることなく10 秒間のシステム PING を提供する方法を確認してください。

ジョブを実行するのに 5 秒かかるスクリプトがある場合は、5 秒待つべきではありません。サーバー スレッドをブロックすることは、最も賢明なことではありません。

別のサーバーでこれを行う場合、たとえば Nginx のようなシングルスレッド プログラムを使用すると、新しい接続が処理されなくなります。サーバーは停止します。

G-WAN は、(a) 複数のスレッドを使用し、(b) 専用の非同期インターフェイスを備えているため、より優れています。以下を参照してください。

G-WAN が提供する長期間にわたる応答の場合:

  1. Comet API ( comet.cの例を参照)
  2. ストリーミング API ( stream1 / 2 / 3 .c の例を参照)
  3. I/O のブロックを回避するための透過的な非同期インターフェイス。

したがって、G-WAN が実際の遅いスクリプトをどのように処理するかを確認したい場合は、現実的なコードを記述してください。

于 2013-03-04T15:42:57.867 に答える