gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:16:12 24 4
gpt4 key购买 nike

我有一个网站,其中每个网页都编译成二进制文件(我有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com