问答 百科手机端

iis下的FastCGI开发初试

2023-03-12 07:36
FastCGI的好处是模块的独立性,接口的统一性。在fastcgi程序中出现运行故障或者处理延迟,不会影响网站的其余部分。

在iis下作了尝试。

先下载开发包。开发包实现了fastcgi协议。fastcgi协议是fastcgi程序和web server之间的TCP数据交换协议。

原来的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位。字符集选择多字节。

全程序优化选择“使用链接时间代码生成”。(把需要的库函数都静态链入)

release版本运行库选择“多线程”,不要带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发送数据。

编译得到exe文件。iis中配置“处理程序映射”,“添加模块映射”,选择“fastcgimodle”,建立请求路径到cgi文件的关联。即可。

===

网上还有c++的库,没有研究。
热门