iis下的FastCGI开发初试
更多文章...

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