c - 如何用C语言实现FastCGI?

标签 c apache cgi fastcgi

我有一个网站,其中每个网页都编译成二进制文件(我有 100 个网页,因此我有 100 个二进制文件)。 Apache 的 .htaccess 包含“SetHandler cgi-script”行,该行指示 apache 在请求二进制文件(网页)时使用 CGI。

如何修改此网站以使用 FastCGI 而不是 CGI?

我是否只需包含此 header 并在 100 个二进制文件中的每一个中使用此 while 循环 ( FastCGI.com ) 并将 .htaccess 修改为“SetHandler fastcgi-script”?

#include "fcgi_stdio.h" // instead of stdio.h  
while(FCGI_Accept() >= 0)  

那么 FastCGI 到底是如何工作的呢? Apache 将为整个网站使用 1 个持久进程来分派(dispatch)网页,还是为 100 个二进制文件中的每一个都使用 1 个持久进程?

最佳答案

FastCGI 脚本是一个循环监听连接的网络服务器。 Web 服务器将请求转发到 FCGI 服务器,后者通过套接字连接发回一些动态生成的内容。因此,FCGI 脚本比 CGI 更快,因为它不会为每个请求重新生成。

我不明白为什么 100 个页面需要 100 个二进制文件。根据某些请求参数,单个脚本足以生成 100 页的内容。 FCGI 服务器还应该能够很好地适应多个连接,因为它通常会轮询套接字文件描述符。 (查看实现的代码以确保这一点)。

要生成 100 个页面,您不一定需要 100 个 if 语句。考虑这个伪代码:

hash_table page_generators; // map page types to function objects (or function pointers)
page_generators["login_page"] = handle_login_page_fn; 
page_generators["contact_page"] = handle_contact_page_fn; 
// ... and so on

// request handler
page_type = request.get("page_type");
fn = page_generators[page_type];
if (fn == NULL)
    return "<html><body>Invalid request</body></html>";
else
    return fn(request);

关于c - 如何用C语言实现FastCGI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4113791/

相关文章:

php 变量 $page 未正确传递到 URL

php - 如何从网页在服务器上执行脚本?

cgi - 是否有 CGI 的替代品(我真的需要一个)吗?

从 Linux 内核模块中调用用户空间函数

c - 如何在 C 中将元素添加到字符串数组?

c - 读取结构内部的字符时有什么问题吗?

perl - 使用 perl 从 http 帖子中获取/转储所有信息

c - 在 C 语言中,数组是不可分配的,那么为什么这个程序可以工作呢?

当 allow_url_fopen 打开时,php file_get_contents 返回 null

php - 加载 Magento 页面时出现奇怪的错误