使用Kylix3开发ApacheDSO

文章作者 100test 发表时间 2007:10:10 11:24:32
来源 100Test.Com百考试题网


kylix是linux下非常好的集成开发工具(个人认为是windows程序员转向Linux最适合的),前一段工作中使用Kylix3进行了Apache动态共享对象(DSO)的开发,在开发工作中遇到了许多的问题,经过摸索一一解决了,有些经验给大家共享,以免后来者走弯路。

为什么要采用DSO
最重要的原因是效率。Apache是模块化设计的,所以它可以加载各种各样的服务器端脚本解释器来支持动态的网页。我以前开发的是cgi,但是随着页面访问量的增大,cgi已经不看重负,我需要提高效率。由于原有的代码量很大,我基本上不可能重新写php或者jsp来代替他们,所以我选择了把最常调用的模块编译成动态共享对象(DSO).。

还有一个原因,cgi程序是短连接,不能保存用户的状态信息,如果采用常驻内存的DSO,那么这个问题也可以迎刃而解了。

很重要的版本问题
用kylix开发DSO过程中的版本问题是非常重要的。开源的Apache更新的很快,Apache 1.*版本和2.*版本的DSO格式是不一样的,一定要考虑到。Delphi6/kylix2编译出来的DSO是对应Apache 1.*版本的。我使用的是kylix3和Apache2.0.43,Borland的官方网站上说kylix3不支持Apache2 的DSO,这让我郁闷了很长时间。后来知道了Delphi7支持Apache2的消息,而Delphi7的CLX技术是跨平台的,这让我找到了解决的办法。

Delphi7的DSO2工程里要引用HTTPD2、ApacheTwoHTTP和ApacheTwoApp(DSO1对应的是HTTP、ApacheHTTP和ApacheApp),那么我就将Delphi7安装目录下源代码目录中对应的pas文件拷贝出来,存放到kylix3的源代码目录下然后编译。我查看过源代码,里面有跨平台条件编译的符号,所以这种做法是可行的。

模块的工作原理
Apache模块可以在Apache中登记它们提供函数的回叫信号。回叫是一种可以在Apache中登记的函数,Apache可以在请求进程循环中的多个阶段调用该函数。回叫通常作为进程的特殊事件处理程序登记。多数Apache为模块登记回叫函数提供的链接都是HTTP请求循环的一部分。Apache当前定义了11种请求循环阶段,模块可以登记回叫函数。它们依次为:读后请求(Post-Read)、URL翻译、头部解析、访问控制、身份验证、授权、MIME类型检查、修正(FixUp)、响应或满足、日志记录、清除。

编译Apache支持DSO
不幸的是,默认的Apache配置是不支持DSO的,所以我们必须修改配置文件然后重新编译,我是直接通过命令行完成的。这个不难,把得到的httpd*.tar.gz文件解包后,进入该目录,键入如下的命令:

./configure -enable-so
make
make install


在编译过程中如果出现了问题的话,查看一下出错的信息,一般都是没有相应的开发包造成的,把开发包装上就行了。默认安装在/user/local/apache2/目录,如果你要有别的配置要求,键入./configure -help自己看看吧。

开发 DSO
有了前面的准备工作,使用Kylix开发DSO就变得非常简单了,只需要在建立工程的时候选择生成Apache DSO,和建立CGI没有什么不同,Kylix把不同的地方透明化了。

在工程文件中还要作如下修改:

默认建立的工程文件(以webSnap工程为例):

Library Project1
Uses
WebBroker,
ApacheApp,
……
{$R *.res}
exports
apache_module name Project1_module
….
….


相关文章


C语言程序静态库和动态库的创建及其应用
C辅导:三视图的画法
用C语言编写Windows服务程序的五个步骤
C语言中实现点在多边形内算法
使用Kylix3开发ApacheDSO
在linux下使用c语言操作临时文件
用键盘移动光标的简单介绍
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛