返信内容:
現在、CGI モードで実行されているサーバーは存在しないはずです。これが、この契約が現在も継続できる主な理由です。サーブレットは、Python の WSGI に似ています。Web サーバーと Web アプリケーションを明確に分離できるため、Web アプリケーションはサーブレット インターフェイスを一度呼び出すことができます。 Web サーバーがマルチスレッド、マルチプロセス、または多重化を使用しているかどうかなどの技術的な詳細ですが、このインターフェイスを実装するだけで済みます。プログラミングインターフェースであるため、サーブレットはJavaでのみ使用できます。他の言語はサーブレットでプログラミングできません。
FastCGIはネットワークです。プロトコルはソケット上で動作し、言語に依存しません。従来、CGI はリクエストが来るたびにサーバーからプロセスをフォークするのが一般的でした。CGI はそのリクエストのみを処理し、処理が完了すると終了するという処理プロセスでした。標準入力データ、標準出力からの HTTP 応答を出力します。プロセスを常に作成および破棄する必要があるため、この実装のパフォーマンスは比較的低く、その機能にも多くの制限があります。 FastCGI は CGI を改良したもので、1 つの接続で複数の連続したリクエストを受け入れ、それらを 1 つずつ処理するため、スループットが向上します。 FastCGI は、CGI と同様、言語とは関係ありません。FastCGI プロトコルに従っている限り、どの言語でも使用できます。ただし、通常、1 つの接続で一度に処理できるリクエストは 1 つだけです。そのため、ある程度の同時実行性を達成する必要があります (FastCGI にも多重化の機能がありますが、それがどの程度サポートされているかはわかりません)
しかし、実際には、Web アプリケーションの観点からは、 2 つの違いは大きくありません。PHP は FastCGI を使用しますが、各リクエストは 1 回ずつ呼び出されます。多くの PHP プログラマは、保守を困難にするために Web ページとコードを混在させることを好みますが、PHP は Java のような MVC を使用する OOP の使用もサポートしており、Java はコードを埋め込むことができる JSP などのテンプレートもサポートしています。たとえば、Java は同じプロセスで動作し、グローバル オブジェクトを呼び出すことができ、追加のスレッド プールを使用できるなど、いくつかの違いがあります。一方、PHP オブジェクトのライフサイクルは基本的に 1 つのリクエストの範囲に限定されますが、多くの点が異なります。は依然として同様であり、すべてリクエスト指向のプログラミングです。
違いを確認するには、単純なサーバー コードから始めます
CGI Python の組み込み CGIHTTPServer を見てください。主なコードは次のとおりです。 run_cgi では、プロセスをフォークしてから、サーバーと親子関係を持っています。プロセス
サーブレットの spring+jetty を参照してください。
アプリのコードとサーバーは同じプロセス内にあります