FastCGI是cgi的改进,它让应用程序常驻内存,并和webserver之间进行通信。fastcgi可以让我们用自己熟悉的语言编写网站功能,比如用c语言。在fastcgi程序中出现运行故障或者处理延迟,不会影响网站的其余部分。
在iis下作了尝试。iis需要先安装fastcgi模块。下面是开发过程:
先下载fastcgi开发包。开发包实现了fastcgi协议。fastcgi协议是fastcgi程序和web server之间的数据交换协议。
原来的fastcgi.com的资料已经转移到github上。通过搜索下载了fcgi2-master.zip文件。https://github.com/FastCGI-Archives/fcgi2
这是c语言的开发包,32位的。里面有vc6的dsp文件。不过考虑到以后可能需要修改为64位程序,所以采用visual studio 2019来编译。
利用libfcgi目录里的.c文件和include目录的.h文件建立一个工程,目标是生成lib文件。
fcgiapp.c是底层协议实现,fcgi_stdio.c是高层封装。os_win32.c是windows下编译的底层支持。
编译时选择X86平台即32位。字符集选择多字节。
全程序优化选择“使用链接时间代码生成”。(把需要的库函数都静态链入)
c/c++下的代码生成选项,release版本的运行库建议选“多线程”,不要带dll。否则服务器需要有vcruntime140.dll。
字符集建议选用多字节。如用unicode则出现警告:从“char *”到“LPCWSTR”的类型不兼容。但可以修改代码解决。
编译时出现很多警告。这是因为这些是vc6时代的文件。可针对警告,上网搜索,一一解决。具体也有些忘了,
比如c文件中加入:
#define _CRT_SECURE_NO_WARNINGS
生成fastcgi.lib后,再创建fastcgi应用程序,选择控制台项目。项目配置同上。
#include "fcgi_stdio.h"
#pragma comment(lib,"fastcgi.lib")
#pragma comment(lib,"ws2_32.lib")
主循环:
while (FCGI_Accept() >= 0) {
char* pinput=getenv("QUERY_STRING"); //get模式下获取输入
printf("Content-type:text/html\n\n");//输出页面开始
printf(...);//输出内容
}
printf已被重定义,实际上是向webserver发送数据。
如果需要获取post方式提交的数据,应该用FCGI_gets函数(未测)。
编译得到exe文件。iis中配置“处理程序映射”,“添加模块映射”,选择“fastcgimodle”,建立请求路径到exe文件的关联。
然后用浏览器访问设定的请求路径即可看到结果。
===
网上还有c++的库,没有研究。
© time.org.cn