试用EF开发WEB应用程序(2): Hi, FastCGI (附图)

题记:用“易语言.飞扬”(EF)开发WEB应用程序,此前还没有先例。但因为EF本地开发包(EFNDK)已经发布,用C/C++开发一个EF类库,使其支持EF开发WEB应用程序,应该并非难事。当然也可想而知,其中必有诸多难点有待解决。此系列文章,为本人探索过程之记录,对外人未必有多大价值。如有网友乐观其事,还请理性待之。作者:liigo。转载请务必注明出处:http://blog.csdn.net/liigo/。在线留言。


试用EF开发WEB应用程序(2): Hi, FastCGI

在前一篇文章中,我们已经选择了FastCGI作为EF开发WEB应用程序的技术方案,并且提到已经初步完成了EF的FastCGI类库(fastcgi.efn,点击下载)。下面试用EF编写我们的第一个网络应用程序。

请看以下“易语言.飞扬”(EF)源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

引入 fastcgi;

公开 类 启动类
{
        公开 静态 启动()
        {
                int count = 1;
                FCGI fcgi = new FCGI();
                while(fcgi.Accept() >= 0)
                {
                        fcgi.Output("Content-type: text/plain\r\n\r\n");
                        fcgi.Output("Hi, FastCGI. ".重复(count));
                        count++;
                }
        }
}

看到以上代码,尤其是“while(fcgi.Accept() >= 0)”这一行,我想很多熟悉FastCGI编程的朋友都会会心地一笑,呵呵,太象了,这分明就是典型的 FastCGI 编程模式嘛。

现在简单分析一下以上代码。第1行引入fastcgi类库。第3到6行是EF语言的语法元素,略过不提。第7行定义一个整数型变量count,其用意后面还要讲到。第8行,创建一个FCGI类型(此类型来自类库fastcgi.efn)的变量fcgi。第9行,调用fcgi.Accept()方法循环接收客户端HTTP请求(HTTP Request)。第11行,调用fcgi.Output()方法,告知WEB服务器后面将要返回的内容类型(Content-type),这是必须的。第12行,调用fcgi.Output()方法,向客户端返回数据内容。第13行,变量count的值在原值基础上加1。

根据FastCGI原理,当有多个客户端请求到来时,程序流程会始终在第9行处的while循环中流转,没有客户端请求时,程序流程将暂停于fcgi.Accept()内部。这也正是FastCGI在运行效率上优于CGI的主要原因(CGI每接收一个Request都会启动CGI程序,执行后又退出该程序)。我们可以通过count变量来验证这一点。count在第7行被初始为1,以后每收到一个请求,它的值都会加1;而第12行的输出内容,又取决于count的值,所以结果应该是:第一次输出一遍“Hi, FastCGI. ”,第二次(刷新)输出两遍“Hi, FastCGI. ”,第三次(刷新)输出三遍……。在线演示。下面的图片证实了我们的推论:

 试用EF开发WEB应用程序(2): Hi, FastCGI (附图)_第1张图片

(上图中URL文件后缀名".efcgi"取决于WEB服务器配置,这里取其"EF"+"FCGI"之意。)

WEB服务器的选择

要执行FastCGI程序,必须有支持FastCGI的WEB服务器。目前主流的WEB服务器均提供FastCGI支持。

Lighttpd 是一个轻量级WEB服务器,性能很好,内存和CPU资源消耗很低,又专门对FastCGI有过优化,是首选;Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,以其快速、低耗、稳定、高并发而闻名,是次选;Apache名气虽大,对FastCGI支持据说并不太好,是末选。

在Windows操作系统下做FastCGI应用程序开发测试,可选择MyServer。本人开发测试暂用此WEB服务器。

 

下篇预告:使用Query String。

你可能感兴趣的:(liigo,C/C++,EF,FastCGI,易语言.飞扬)