linux下apache + fastcgi开发 C版本接口说明

本文介绍了Linux环境中使用Apache与FastCGI进行C接口开发的基础知识,包括FastCGI的工作原理、单线程与多线程编程模板,并详细解析了FastCGI的重要数据结构、头文件及核心接口FCGX_Accept_r和FCGX_Finish_r的使用。通过理解这些内容,可以更好地进行FastCGI编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应工作需求,最近用fastcgi写了个小项目。鉴于网上资料缺乏且存在一些错误,为了少走一些弯路,本人干脆利用课余时间把fastcgi源码读了一遍。总体来讲,整个源码异常的简洁明了,但是fastcgi却有如此稳定的性能表现,不得不让人惊叹。

1.fastcgi简介

CGI全称是“通用网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序一般运行在网络服务器上。 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。

FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。


2.工作原理

1)Web Server启动时载入FastCGI进程管理器。  

2)FastCGI进程管理器自身初始化,启动多个CGI解释器进程并等待来自Web Server的连接。

3)当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。

4)FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。

3.fastcgi单线程与多线程编程

单线程模板:

#include <fcgi_stdio.h>  
  
void main(void)  
{  
    int count = 0;  
    while(FCGI_Accept() >= 0) {  
        printf("Content-type: text/html\r\n");  
        printf("\r\n");  
        printf("Hello world!<br>\r\n");  
        printf("Request number %d.", count++);  
    }  
    exit(0);  
}

多线程模板

#define THREAD_COUNT 20  
  
static int counts[THREAD_COUNT];  
  
static void *doit(void *a)  
{  
    int rc;  
    FCGX_Request request;  
    FCGX_InitRequest(&request, 0, 0);  
    for (;;)  
    {  
        rc = FCGX_Accept_r(&request);  
  
        if (rc < 0)  
            break;  
        FCGX_FPrintF(request.out,  
            "Content-type: text/html\r\n"  
            "\r\n"  
            "<title>FastC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值