fastcgi java_FastCGI编程介绍

本文介绍了FastCGI的单线程处理原理,通过解析C代码展示了FCGI_Accept()及其内部实现,讨论了在高并发场景下从单线程转变为多线程的必要性,给出了多线程处理FastCGI请求的示例,以提高服务器性能。

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

0.背景

在项目中加入了等待通讯的内容,所以原来单个请求处理时间增加了。单线程处理的fcgi就会浪费CPU和用户时间,所以需要多线程来处理,减少用户排队时间。

将处理用户请求的部分从单线程变为多线程,需要大概了解改动会不会影响性能。

得到的结论是:多线程和单线程在执行的流程和使用方法几乎一样,所以多线程不会带来额外的负担。

1.单线程的处理步骤

1.1一个简单的单线程fcgi请求

C代码

0818b9ca8b590ca3270a3433284dd417.png

#include 

voidmain(void)

{

intcount = 0;

while(FCGI_Accept() >= 0) {

printf("Content-type: text/html\r\n");

printf("\r\n");

printf("Hello world!
\r\n");

printf("Request number %d.", count++);

}

exit(0);

}

1.2进入FCGI_Accept。

进入这个 FCGI_Accept() 方法里面,在文件fcgi_stdio.c里。

C代码

0818b9ca8b590ca3270a3433284dd417.png

intFCGI_Accept(void)

{

//变量表示是否接收请求。默认为Fasle,不接收请求

if(!acceptCalled) {

//判断是否为cgi,变量为全局静态的,下次还会用。

isCGI = FCGX_IsCGI();

//状态改为接收请求。

acceptCalled = TRUE;

//请求的收尾,将数值清空赋初值。

atexit(&FCGI_Finish);

} elseif(isCGI) {

//不是第一次请求,并且是cgi程序。

return(EOF);

}

if(isCGI) {

//cgi的初始赋值操作,不关心。

...

} else{

FCGX_Stream *in, *out, *error;

//char** 字符串数组。

FCGX_ParamArray envp;

//接受请求,这个方法下面介绍

intacceptResult = FCGX_Accept(&in, &out, &error, &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值