モバイル クライアントを扱う場合、HTTP リクエストの送信中に数秒の遅延が発生することはよくあることです。プリフォーク Apache からページまたはサービスを提供している場合、アプリケーション サーバー ロジックが 5 ミリ秒で完了したとしても、子プロセスは 1 つのモバイル クライアントにサービスを提供するために数秒間拘束されます。以下をサポートする HTTP サーバー、バランサー、またはプロキシ サーバーを探しています。
プロキシにリクエストが届きます。プロキシは、ヘッダーと POST/PUT 本文を含む要求の RAM またはディスクへのバッファリングを開始します。プロキシはバックエンド サーバーへの接続を開きません。これはおそらく最も重要な部分です。
プロキシ サーバーは、次の場合に要求のバッファリングを停止します。
- サイズ制限 (4KB など) に達した、または
- リクエストはヘッダーとボディを含めて完全に受信されました
要求 (の一部) がメモリ内にある場合にのみ、バックエンドへの接続が開かれ、要求が中継されます。
バックエンドは応答を返します。ここでも、プロキシ サーバーはすぐにバッファリングを開始します (より寛大なサイズ、たとえば 64KB まで)。
プロキシには十分な大きさのバッファがあるため、バックエンド レスポンスは数ミリ秒でプロキシ サーバーに完全に格納され、バックエンド プロセス/スレッドはより多くのリクエストを自由に処理できます。バックエンド接続はすぐに閉じられます。
プロキシは、リソースを拘束するバックエンドへの接続を持たずに、可能な限り高速または低速でモバイル クライアントに応答を返します。
Squid で 4 ~ 6 を実行できると確信しており、nginx は 1 ~ 3 をサポートしているようです (そして、この点でかなりユニークに見えます)。私の質問は次のとおりです。これらのバッファリング機能と準備が整うまで接続を開かない機能に共感するプロキシサーバーはありますか? たぶん、このバッファリング動作を簡単にするApache config-fuが少しあるのでしょうか? Squid のような恐竜ではなく、無駄のない単一プロセス、非同期、イベントベースの実行モデルをサポートするものはありますか?
(サイダーラント:私はnginxを使用していますが、チャンクされたPOSTボディをサポートしていないため、モバイルクライアントにサービスを提供するのには役に立ちません。はい、安価な50ドルのハンドセットはチャンクされたPOSTが大好きです...ため息)