如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
Apache模块的初步研究总结作者:FREEDOM日期:2010/05/26Apache作为Web服务器,除了可以写CGI程序完成各种Web应用外,Apache也提供了一套API来扩充服务器的功能。Apache本身就是一个由多个模块(module)拼装而成的程序,它的API就是用来写Apache定义的模块的。通过对Apache模块API的研究,总结如下:一、Apache模块API的特点都是C的API:Apache模块API是用标准C语言提供的。模块由一系列回调函数组成:所谓的模块,就是实现一系列模块所需要的回调函数和提供符合预定义数据结构的值。回调函数包括模块初始化(init)、配置信息处理(create_config、merge_config)、文件名转换处理(URI->filename)、内容处理程序(contenthandler)、专有日志输出(logger)等,回调函数可以根据需要全部或部分实现。内容处理程序可以输出相应结果。一个模块可以包含一或多个内容处理程序回调函数:若干个内容处理程序回调函数可以通过一个数据结构(handler_rec)指明。如何激活相应的函数可以通过Apache的配置文件(conf/httpd.conf)指明。内容处理程序可以在访问某个路径时或访问具有某种扩展名的文件时被激活。支持多种生命期的内存池(memorypool):合理的使用可以防止内存泄露,使用内存池申请的动态空间可以在内容处理程序调用后或Apache正常退出时自动释放。二、优点Apache模块是和Apache绑定的,是Apache的一部分,无需每次HTTP请求时都需要加载。三、缺点API可能会更新,由此会造成模块做相应的修改。每次改动模块要重新编译连接Apache(可以通过动态连接方式编译,还没做相应的试验)。对模块的健壮性要求高,因为模块是服务器的一部分。多了一套规范,推广难度比CGI大。四、参考文档http://httpd.apache.org/docs/misc/API.html五、未来研究设想目前的研究还是很初步的。如果可能,未来还可以对以下领域做进一步的研究:通过Apache配置文件配置模块的一些参数,如数据库参数;配置命令各种参数传递方式的使用;配置命令放在VirtaulHost内和VirtualHost外的区别和影响。模块各阶段回调函数的深入研究,充分利用各种回调函数子请求(subrequest)的研究Apache源代码提供的各种操作函数六、如何书写Apache模块(本部分代码都可以在HYPERLINK\l"sample"模块例子中找到)1.定义Apache配置文件命令staticconstcommand_recdump_cmds[]={{"Dump",/*directivename*/cmd_dump,/*configactionroutine*/NULL,/*argumenttoincludeincall*/OR_OPTIONS,/*whereavailable*/RAW_ARGS,/*arguments*/"Dumpdirective-anyarguments"/*directivedescription*/},{NULL}};这个结构指明了可以在Apache配置文件(conf/httpd.conf)可使用的配置命令(本例中为“Dump”)、处理该命令的函数名称(本例中为cmd_dump)、传递参数的方式(本例中为RAW_ARGS)。配置命令处理函数的写法参加HYPERLINK\l"sample"模块例子。一个模块中可以处理若干个配置命令,结构数组最后一个值为NULL。2.定义内容处理函数staticconsthandler_recdump_handlers[]={{"dump-handler",dump_handler},{NULL}};这个结构指明了内容处理函数的名称(用于Apache配置文件,本例中为"dump-handler")和内容处理函数的名称(本例中为dump_handler)。一个模块中可以有若干个内容处理函数,结构数组的最后一个值为NULL。3.定义模块结构moduleMODULE_VAR_EXPORTdump_module={STANDARD_MODULE_STUFF,dump_init,/*moduleinitializer*/dump_create_dir_config,/*per-directoryconfigcreator*/dump_merge_dir_config,/*dirconfigmerger*/dump_create_server_c