我正在尝试找到一种通过 FastCGI 将自己的应用程序连接到 IIS 的正确方法。
fastcgi.com 网站上有官方的 FastCGI 规范和相当古老的库。
该主题的 IIS 页面上也有一些有趣的帖子:http:
//blogs.iis.net/yaminij/archive/2009/01/08/getting-started-with-writing-a-fastcgi-client-application-fastcgi -test-client.aspx
http://blogs.iis.net/rickjames/archive/2007/02/04/fake-fastcgi-web-server.aspx
一切看起来很有希望,除了假设多线程方法通过 FastCGI 与 IIS 连接。
在应用进程中一一处理来自 IIS 的请求没有问题,并让 FastCGI IIS 模块在必要时生成新进程,每个进程一次处理一个请求。
在 fastcgi 应用程序端(而不是 www 服务器端)管理进程/线程提供了一些额外的好处,一些操作(例如配置解析、解码许可证文件等)可以完成一次,其他进程/线程可以使用其中。
进入细节......
在 *nix 平台应用程序上使用 FastCGI 可以这样处理并发请求:
套接字()/绑定()/监听()
// 开始线程 1
accept()
// 结束线程 1
// 开始线程 2
accept()
// 结束线程 2
不幸的是,使用 IIS FastCGI 模块,我找不到合适的解决方案来处理单个进程的多个并发请求(没有通过 IIS FastCGI 模块产生新进程或只是减少其数量)。
我可以从应用程序端的 FastCGI 模块中得到两件事:(
让我们专注于管道并暂时离开 tcp 类型的套接字......)
句柄 – 由 IIS FastCGI 模块使用 CrateNamedPipe() 创建
HANDLE hPipe;
hPipe = GetStdHandle( STD_INPUT_HANDLE );
创建的管道名称
getenv("_FCGI_X_PIPE_")
我可以用这些东西做什么来处理一个应用程序进程中的并发请求?
有没有办法让更多的句柄点进入多线程应用程序版本?
有没有其他方法可以使用 FastCGI IIS 模块来处理一个应用程序进程的并发请求?
是否有可能使用 IIS FastCGI 模块来处理多个请求而不通过 IIS FastCGI 模块产生新的应用程序进程(或只是减少产生进程的数量)?
我可以在应用程序端创建一个命名管道(多个句柄)并将其名称以某种方式传递给 IIS 模块吗?
我可以在应用程序端使用 _FCGI_X_PIPE_ 名称创建命名管道的新句柄吗?
我已经检查了 *nix 环境中的几个配置,它们中的每一个都可以以这种方式处理请求......(一个应用程序进程可以处理并发的多个请求,因此不必总是产生新的应用程序进程来处理并发请求)
- Apache + mod_fastcgi(但不是 mod_fcgi)
- Nginx
- 轻量级
有人能指出我正确的方向吗?
任何帮助表示赞赏。