apache服务器本质上说是一个TCP socket服务,socket模型如下:

下面以worker MPM来说明apache代码中相应处理的位置在哪里:

(以apache httpd 2.2.23版本的代码为基础)

1) 在第一次启动时验证配置没有异常时,创建了socket。

2) open_logs 挂钩调用了 ap_setup_listeners() ,最终在listen.c的make_socket方法执行了apr_socket_bind/apr_socket_listen,进入通信的环节。

3) worker.c的监听线程中负责接受请求,然后利用ap_queue_push把相应的请求放入队列中。下面是接受请求accept_func的调用栈。

4)请求/响应的处理。

请求的处理是通过handler来实现,如果是读取服务器上的静态页面,则由default_handler来处理。同时响应的内容需要通过filter修改之后,最终发送header和body。下面是发送header的调用栈。

暂时写到这里,以后再继续分析。

最新文章

  1. SpringMVC介绍之Validation
  2. Unity5.x在WP8.1中无法使用Reflection API的解决方法
  3. 跟着鸟哥学Linux系列笔记0-如何解决问题
  4. MySQL存储引擎选型
  5. SQL Serve允许远程连接的解决方法
  6. Java异常分类
  7. 中文分词系列(一) 双数组Tire树(DART)详解
  8. 解决xcode7添加启动图片不显示
  9. 【转】eclipse内存设置,tomcat内存设置,查看内存大小
  10. 通过strace 监控 fdatasync
  11. 开发并调试 Mail Add-in
  12. 两个数组各个数相加或相乘变成一个矩阵求第K大
  13. python pip 安装模块步骤
  14. Python_对Excel表进行操作
  15. TCP聊天工具的实现
  16. CloudSim源代码学习——云数据中心(Datacenter)
  17. mongodb 配置文件
  18. 关于elk中filebeat定义好日志输出,但是redis里面却没有输出内容的问题
  19. 【Mac使用系列】Mac锁屏及快捷键
  20. 进阶之路(基础篇) - 021 arduino基础知识

热门文章

  1. [Istio]流量管理API v1alpha3路由规则
  2. python多线程--优先级队列(Queue)
  3. 通过分析system_call中断处理过程来深入理解系统调用
  4. vagrant的学习 之 Laravel
  5. 将Sublime Text 2搭建成一个好用的IDE(转)
  6. Codechef May Challenge 2015
  7. MongoDB学习day05--MongDB开启权限验证,创建用户
  8. Linux内存管理-内核的shmall和shmmax参数(性能调优)(转)
  9. ssh 执行多条命令包含awk的用法
  10. OCR简介及使用