目录
一、简介fcgi:web和web服务器间数据传输的桥梁... 2
二、源码编译配置ARM Lighttpd Fastcgi C.. 3
【1】交叉编译。源文件都从官网下载。 Fcgi lighttpd zlib. 3
【2】配置服务器server.document-root="/www" fastcgi.server "bin-path" => "/www/fastcgi.fcgi", 4
【3】fastcgi编程程序 将生成的文件拷贝到设备/www目录中... 4
FCGX_Stream该struct定义了FastCGI流的状态。... 9
FCGX_Request对一个请求的封装。可供访问的属性:... 9
int FCGX_Init() Initialize the FCGX library. 10
int FCGX_InitRequest(FCGX_Request *request, int sock, int flags). 10
int FCGX_Accept_r(FCGX_Request *request) 接受一个新的请求(多线程安全)。... 10
int FCGX_PutChar(int c, FCGX_Stream *stream) 将字符c写入stream。... 10
int FCGX_PutStr(const char *str, int n, FCGX_Stream *stream) 用于二进制输出。... 11
int FCGX_PutS(const char *str, FCGX_Stream *stream) 用于输出字符串。... 11
int FCGX_FPrintF(FCGX_Stream *stream, const char *format, ...) 将格式化字符串format写入stream。 11
int FCGX_GetChar(FCGX_Stream *stream) 从输入读取一个字节。... 11
int FCGX_UnGetChar(int c, FCGX_Stream *stream) 将字符c推回输入流stream。... 11
int FCGX_GetStr(char *str, int n, FCGX_Stream *stream) 从stream中读取n个连续字节到str中。 12
char *FCGX_GetLine(char *str, int n, FCGX_Stream *stream) 从stream中读取n-1个连续字节到str中。 12
int FCGX_HasSeenEOF(FCGX_Stream *stream) 在读取stream时,如果检测到EOF,那么返回EOF,否则返回0。 12
五、Lighttpd 网页服务源码分析说明post数据lighttpd主程序不处理,而是交给动态执行模块fastcgi等来解析。 12
在FastCGI应用程序中无法获取HTTP POST的主体... 16
一、简介fcgi:web和web服务器间数据传输的桥梁
FastCGI就像CGI一样,FastCGI也是独立于编程语言的。
是web和web服务器间数据传输的桥梁。
就像CGI一样,FastCGI程序运行在完全独立于核心Web Server之外的进程中,
Fastcgi的缺点:
1、对某些服务器的新版本支持不好,对分布式负载均衡没要求的模块化安装是否是更好的选择。
2、目前的fastcgi和server沟通还不够智能,一个fastcgi进程如果执行时间过长会被当成是死进程杀掉重起,这样在处理长时间任务的时候很麻烦.这样做也使得fastcgi无法允许联机调试。
lighttpd提供了一种外部程序调用的接口,即FastCGI接口。这是一种独立于平台和服务器的接口,它介于Web应用程序和Web服务器之间。
FastCGI工作方式是接受Web服务器的请求,以HTTP Request的方式进行响应,实现了应用程序与Web服务器的分离。它的使用需要在Web服务器中安装支持组件,目前支持Apache、Nginx、IIS、Lighttpd等。
优点有:
- 稳定性,fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑
- 安全性,fastcgi和宿主的server完全独立,fastcgi怎么down也不会把server搞垮
- 性能, fastcgi把动态逻辑的处理从server中分离出来, 大负荷的IO处理还是留给宿主server, 这样宿主server可以一心一意作IO,对于一个普通的动态网页来说,,逻辑处理可能只有一小部分,大量的图片等静态IO处理完全不需要逻辑程序的参与
- 扩展性,fastcgi是一个中立的技术标准,完全可以支持任何语言写的处理程序(php、java、python、C++)
FastCGI编程包括四部分:初始化编码、接收请求循环、响应内容、响应结束循环。
CGI能够使用C语言编写,以通过共享内存等方式与其他C语言进程通讯。对CGI程序的每个HTTP请求,web服务器都会创建一个新的CGI进程,web服务器通过环境变量传递http请求,CGI程序通过标准输出返回处理结果,然后退出。
fastcgi使用循环响应HTTP请求,服务器负载比cgi小,能与其他程序(如数据库)保持持续链接。fastcgi可以使用tcp或UNIX domain与web服务器通讯,并将HTTP请求转换为环境变量传入,TCP方式中使用标准输出返回处理结果,UNIX domain方式则使用fastcgi封装的函数。cgi-fcgi程序能够将cgi程序作为fastcgi程序运行。
lighttpd支持fastcgi,能够启动fastcgi程序,并进行负载均衡。