C 杂谈之 Apache的模块开发 (一)
思维导图
点击查看大图

介绍
做为php开发工程师,要想在技术上有所提高,必须要对C有更深入的了解。PHP工程师接触最多的就是apache服务器,所以今天先拿它练练手。不当之处,大家多多指教。
Apache支持许多特性,大部分通过模块扩展实现。
准备条件
安装apache.我安装的版本是httpd-2.2.22,注意高版本在安装过程中问题比较多,建议安装比较低一些的版本。
安装过成根据httpd里面的INSTALL文件进行安装。
Apache的安装目录是/opt/modules/httpd
源文件:/home/zhoubaochuan/download/httpd-2.2.22
模块处理过程

在apache服务器下运行时,一般来说,它以"mod_模块名"的形式集成。

1> mod模块接受Apache传递过来的请求
2> 处理这些请求,
3> 将处理后的结果返回给Apache。
注意: 对于每一个模块,必须保证文件名是以"mod_"开始的。如mod_test.c。——如果命名格式不对Apache将认为此模块不合法。
运行过程
Apache的运行分为启动阶段和运行阶段。

启动阶段

>> 将以特权用户root或超级管理员Administrator完成启动。

>> 整个过程在单线程中。包括配置文件解析(http.conf),模块加载(如mod_test)和系统资源初始化(如日志文件,共享内存段,数据库链接等)

>> 这个阶段把许多比较慢或者花费比较高的操作都集中在这个阶段完成,以减少后面请求服务的压力。

运行阶段

>> Apache放弃特权用户级别,使用普通用户,主要基于安全考虑。

>> 处理http请求,处理过程分为链接,处理,断开。

加载机制

检查是否为Apache模块:
通过检查module结构体中的magic字段实现的。而magic字段是通过STANDARD20_MODULE_STUFF体现。
在这个宏中magic的值为MODULE_MAGIC_COOKIE

激活模块

Apache会调用相关函数ap_add_loaded_module将模块激活(激活:将模块放入相应的链表中(ap_top_modules链表,ap_top_modules链表用来保存Apache中所有被激活的模块。)
Apache的每一个模块都是以module结构体的形式存在。可以细看源码与注释。

编码——mod_test模块为例

1.先写个Makefile文件(避免每次都打一堆的命令,make一下就都好了——很好用啊!大家试试)

2.写实现代码

3.编译文件.

4.开始在apache中应用,配置httpd.conf文件,加入下面一行文字 .

5.看看效果

总结
这篇文章只是apache模块的局部实现过程,在生产环境中,会有很多的处理过程。包括对请求的处理,认证等等。
通过apache模块,我们有的时候可以直接绕过web语言的实现机制,直接通过C语言,把一些简单的数据存入介质中,如文件,数据库,内存,然后做为api接口供其他业务调用。
参考资料:《The Apache Modules Book--Application Development with Apache》

posted on 2012-03-27 13:03 川山甲 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/baochuan/archive/2012/03/27/2418789.html

C 杂谈之 Apache的模块开发 (一)相关推荐

  1. C语言-apache mod(模块开发)-采用apxs开发实战(centos7.2 linux篇)

    C语言-apache mod(模块开发)-采用apxs开发实战(centos7.2 linux篇) 名词解释:apxs apxs is a tool for building and installi ...

  2. 服务器架设笔记——Apache模块开发基础知识

    通过上节的例子,我们发现Apache插件开发的一个门槛便是学习它自成体系的一套API.虽然Apache的官网上有对这些API的详细介绍,但是空拿着一些零散的说明书,是很难快速建立起一套可以运行的系统. ...

  3. Apache模块开发

    一.简介 Apache HTTP服务器是一个模块化的软件,使管理者可以选择核心中包含的模块以裁剪功能.可以在编译时选择被静态包含进httpd二进制映象的模块,也可以编译成独立于主httpd二进制映象的 ...

  4. apache c语言源码,Apache模块开发/用C语言扩展apache(2:APR编程介绍)

    Apache模块开发/用C语言扩展apache(2:APR编程介绍) by linux_prog 可以看到apache代码中使用了大量的以apr_开头的结构或者函数,这些其实是APR. 什么是apr  ...

  5. 用c++来开发php的底层模块|用c++来开发apache模块,Apache模块开发实例(2)

    三.常见问题 1.常见错误 apxs:Error: Sorry, cannot determine bootstrap symbol name. apxs:Error: Please specify ...

  6. Nginx模块开发入门

    前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...

  7. windows下搭建Apache+Mysql+PHP开发环境

    原文:windows下搭建Apache+Mysql+PHP开发环境 要求 必备知识 熟悉基本编程环境搭建. 运行环境 windows 7(64位); Apache2.2; MySQL Server 5 ...

  8. 网站流量日志数据分析系统(模块开发----数据仓库设计)

    1. 维度建模基本概念 维度建模(dimensional modeling)是专门用于分析型数据库.数据仓库.数据集市建模的方法.数据集市可以理解为是一种"小型数据仓库". 维度表 ...

  9. 电商系统开发实战-用户微服务基础模块开发

    电商系统开发实战-用户微服务基础模块开发 1.用户微服务项目开发之收货地址查询接口开发 1.1 配置文件配置 application.yml server:port: 9001spring:appli ...

  10. Nginx服务模块开发

    纵观网上各种关于nginx的模块开发的资料都是基于HTTP的模块开发,这里就整理一篇是基于TCP协议的服务模块开发,并且给出一套自定义服务模块的源码,该模块主要实现的功能是监听某一端口,然后把接收到的 ...

最新文章

  1. WPF-002 下拉列表的简单实现
  2. PDMan-2.1.3 发布:用心开源,免费的国产数据库建模工具
  3. wxWidgets:持久对象概述
  4. Jfinal 显示欢迎页 index.jsp
  5. 0宽字符加密_vulnhub实战靶场攻略:Breach 1.0
  6. 关于面试 | 面试官
  7. php 计算上个月,如何使用PHP计算上一个月的今天
  8. OpenSift源代码编译过程记录
  9. 王树尧老师运筹学课程笔记 07 线性规划与单纯形法(标准型、基、基解、基可行解、可行基)
  10. 信号处理中的预加重、去加重和均衡
  11. [心得]如何系统自学经济学
  12. 人工智能截稿日期重磅
  13. android平台的开源框架的思考
  14. 苹果app调试流水账
  15. Qt 信号槽的应用(三)
  16. 前端开发新人写简历的大概套路
  17. sql/hana批量存入表(每日一总)
  18. 华为最新智能服务器,曝光:华为最新一代FusionServer Pro 2488H V6智能服务器
  19. dxf文件解析,g代码解析,图片解析C#工程文件
  20. 一个程序员眼中的北京和上海

热门文章

  1. 研发做好了,产品不一定能卖掉;研发做不好,没东西可卖
  2. 世界杯:左撇子在体育方面大有前途
  3. warning: C4819的解决办法
  4. win10计算机本地无法连接,Win10没有本地连接怎么办?
  5. element-plus Table 表格自定义列模板使用及问题
  6. rect函数_Python基础进阶:从函数到高级魔法方法--Day 6
  7. python 整除的数组_LeetCode 974. 和可被 K 整除的子数组 | Python
  8. image.open()得到的图片是什么类型_复古门窗花格图片大全让精彩生活继续闪耀 「巴森」...
  9. 八、关于FFmpeg需要絮叨的一些事
  10. 一个合理的生产环境的 Web 应用程序应该是什么样子的