Apache模块嵌入技术的初步研究总结.docVIP

  • 2
  • 0
  • 约4.83万字
  • 约 13页
  • 2017-08-06 发布于河南
  • 举报
Apache模块嵌入技术的初步研究总结

Apache模块的初步研究总结 作者:FREEDOM 日期:2010/05/26 Apache作为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)、内容处理程序(content handler)、专有日志输出(logger)等,回调函数可以根据需要全部或部分实现。内容处理程序可以输出相应结果。 一个模块可以包含一或多个内容处理程序回调函数:若干个内容处理程序回调函数可以通过一个数据结构(handler_rec)指明。如何激活相应的函数可以通过Apache的配置文件(conf/httpd.conf)指明。内容处理程序可以在访问某个路径时或访问具有某种扩展名的文件时被激活。 支持多种生命期的内存池(memory pool):合理的使用可以防止内存泄露,使用内存池申请的动态空间可以在内容处理程序调用后或Apache正常退出时自动释放。 二、优点 Apache模块是和Apache绑定的,是Apache的一部分,无需每次HTTP请求时都需要加载。 三、缺点 API可能会更新,由此会造成模块做相应的修改。 每次改动模块要重新编译连接Apache(可以通过动态连接方式编译,还没做相应的试验)。 对模块的健壮性要求高,因为模块是服务器的一部分。 多了一套规范,推广难度比CGI大。 四、参考文档 /docs/misc/API.html 五、未来研究设想 目前的研究还是很初步的。如果可能,未来还可以对以下领域做进一步的研究: 通过Apache配置文件配置模块的一些参数,如数据库参数;配置命令各种参数传递方式的使用;配置命令放在VirtaulHost内和VirtualHost外的区别和影响。 模块各阶段回调函数的深入研究,充分利用各种回调函数 子请求(subrequest)的研究 Apache源代码提供的各种操作函数 六、如何书写Apache模块 (本部分代码都可以在 HYPERLINK \l sample 模块例子中找到) 1.定义Apache配置文件命令 static const command_rec dump_cmds[] = { { Dump, /* directive name */ cmd_dump, /* config action routine */ NULL, /* argument to include in call */ OR_OPTIONS, /* where available */ RAW_ARGS, /* arguments */ Dump directive - any arguments /* directive description */ }, {NULL} }; 这个结构指明了可以在Apache配置文件(conf/httpd.conf)可使用的配置命令(本例中为“Dump”)、处理该命令的函数名称(本例中为cmd_dump)、传递参数的方式(本例中为RAW_ARGS)。配置命令处理函数的写法参加 HYPERLINK \l sample 模块例子。一个模块中可以处理若干个配置命令,结构数组最后一个值为NULL。 2.定义内容处理函数 static const handler_rec dump_handlers[] = { {dump-handler, dump_handler}, {NULL} }; 这个结构指明了内容处理函数的名称(用于Apache配置文件,本例中为dump-handler)和内容处理函数的名称(本例中为dump_handler)。一个模块中可以有若干个内容处理函数,结构数组的最后一个值为NULL。 3.定义模块结构 module MODULE_VAR_EXPORT dump_module = { STANDARD_MODULE_S

文档评论(0)

1亿VIP精品文档

相关文档