FastCGI - 多线程应用程序 - IIS

时间:2013-05-16 07:14:11

标签: c++ multithreading visual-c++ iis fastcgi

我正在尝试找到一种通过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可以通过以下方式处理并发请求:

socket()/ bind()/ listen()

// BEGIN线程1
接受()
// END thread 1

// BEGIN线程2
接受()
// END thread 2

不幸的是,使用IIS FastCGI模块,我找不到合适的解决方案来处理单个进程的多个并发请求(不通过IIS FastCGI模块生成新进程或只是减少其数量)。

我可以从应用程序端的FastCGI模块获得两件事:
(让我们关注管道并暂时留下tcp类型的插座......)

  1. handle - 由IIS FastCGI模块使用CrateNamedPipe()创建

    HANDLE hPipe;
    hPipe = GetStdHandle( STD_INPUT_HANDLE );

  2. 创建的管道名称

    getenv("_FCGI_X_PIPE_")

  3. 在一个申请流程中,如何处理并发请求,我该怎么办? 有没有办法获得更多的句柄点进入多线程应用程序版本?
    有没有其他方法可以使用FastCGI IIS模块来处理一个应用程序进程的并发请求?

    是否可以使用IIS FastCGI模块来处理多个请求而不会通过IIS FastCGI模块生成新的应用程序进程(或者只是为了减少生成进程的数量)?

    我可以在应用程序端创建一个命名管道(多个句柄),并以某种方式将其名称传递给IIS模块吗? 我可以在应用程序端使用_FCGI_X_PIPE_ name给出命名管道的新句柄吗?

    我在* nix环境中检查了几个配置,并且每个配置都可以处理请求...(一个应用程序进程可以处理并发多个请求,因此不必总是生成新的应用程序进程来处理并发请求)< / p>

    • Apache + mod_fastcgi(但不是mod_fcgi)
    • Nginx的
    • 的lighttpd

    有没有人能指出我正确的方向?

    任何帮助表示感谢。

0 个答案:

没有答案