FastCGI を介して独自のアプリケーションを IIS に接続する適切な方法を見つけようとしています。
fastcgi.com サイトには、公式の FastCGI 仕様とかなり古いライブラリがあります。件名のIIS
ページにも興味深い投稿がいくつかあります。
-test-client.aspx
http://blogs.iis.net/rickjames/archive/2007/02/04/fake-fastcgi-web-server.aspx
マルチスレッドアプローチを想定したFastCGIを介したIISとの接続を除いて、すべてが有望に見えます。
アプリ プロセスで IIS からの要求を 1 つずつ処理することに問題はなく、必要に応じて FastCGI IIS モジュールが新しいプロセスを生成し、それぞれが一度に 1 つの要求を処理します。
(www サーバー側ではなく) fastcgi アプリケーション側でプロセス/スレッドを管理すると、いくつかの追加の利点が得られます。一部の操作 (構成の解析、ライセンス ファイルのデコードなど) は 1 回で実行でき、他のプロセス/スレッドは使用できます。そのうちの。
詳細に入る....
*nix プラットフォーム アプリケーションで FastCGI を使用すると、同時要求を次のように処理できます。
socket() / bind() / listen()
// BEGIN スレッド 1
accept()
// END スレッド 1
// BEGIN スレッド 2
accept()
// END スレッド 2
残念ながら、IIS FastCGI モジュールを使用して、1 つのプロセスで複数の同時要求を処理するための適切なソリューションを見つけることができません (IIS FastCGI モジュールによって新しいプロセスを生成したり、その数を減らしたりする必要はありません)。
アプリケーション側の FastCGI モジュールから 2 つのことを取得できます:
(パイプに注目して、tcp のようなソケットはしばらく置いておきます...)
ハンドル – IIS FastCGI モジュールによって CrateNamedPipe() を使用して作成
HANDLE hPipe;
hPipe = GetStdHandle( STD_INPUT_HANDLE );
作成されたパイプの名前
getenv("_FCGI_X_PIPE_")
1 つのアプリケーション プロセスで同時要求を処理するには、これらのことで何ができますか?
マルチスレッド アプリケーション バージョンに入るハンドル ポイントを増やす方法はありますか?
1 つのアプリケーション プロセスで同時要求を処理する FastCGI IIS モジュールを使用する他の方法はありますか?
IIS FastCGI モジュールを使用して、IIS FastCGI モジュールによって新しいアプリ プロセスを生成せずに (または生成プロセスの数を減らすだけで) 複数の要求を処理することはできますか?
アプリケーション側で名前付きパイプ (複数のハンドル) を作成し、その名前を何らかの方法で IIS モジュールに渡すことはできますか?
アプリケーション側で _FCGI_X_PIPE_ name によって指定された名前付きパイプへの新しいハンドルを作成できますか?
* nix環境でいくつかの構成を確認しましたが、それぞれがそのようにリクエストを処理できます...(1つのアプリケーションプロセスで複数の同時リクエストを処理できるため、同時リクエストを処理するために常に新しいアプリプロセスを生成する必要はありません)
- Apache + mod_fastcgi (ただし、mod_fcgi は除く)
- ニンクス
- lighttpd
誰かが私を正しい方向に向けることができますか?
どんな助けでも感謝します。