我想用 C++11 (GCC 4.7) 为 Apache 编写一个模块并配置它:
- 我的代码中的自定义初始化函数在服务器启动时调用一次。
- 请求处理工作者由 apache 作为 pthread 生成,都在同一个进程中。(不分叉进程)
- HTTP 请求由来自工作线程的函数调用处理,该函数调用调用我在代码中编写的阻塞函数。
这一切有可能吗?或者 Apache 不是这样设计的?如果可能的话,如何配置它以及构建和附加模块的草图是什么?
自从我编写 Apache 模块以来已经有很长时间了,但我认为模块无法控制子节点是否作为新的分叉或进程产生,我认为这是一个服务器范围的设置。
否则,这一切都很有可能。Apache 提供了可用于在服务器运行时的不同时间调用模块代码的钩子。
回到 Apache 1.3.x 时代,我曾经使用《用 Perl 和 C 编写 Apache 模块》一书,它主要侧重于使用 Perl,但有足够的关于 C API 的信息来弄清楚它。Apache 2.4的开发人员文档展示了如何使用钩子和控制请求处理。