技术分享之web server与php-fpm

主题

web server与动态请求

主流程

  1. web server 与 html
  2. web server 与 cgi
  3. web server 与 fastcgi

1. web server到底做了什么?

  1. 在指定端口上监听请求
  2. 等待来自客户端的请求
  3. 处理http请求
    1. 通过GET /index.html HTTP/1.1解析出本地文件
    2. root path拼接上文件名获取到本地文件内容
  4. 将内容拼接上相应头返回给客户端

2. web server如何解析动态请求?

  1. 通用网关接口(Common Gateway Interface/CGI)1993 NCSA
    1. 规范了web server与处理程序之间的通讯标准
  2. 标准定义了什么?
    1. web server与处理程序使用stdin,stdout,环境变量数据交换
    2. 处理程序在单独的进程中执行
  3. cgi的工作方式
    1. 将脚本定义好放在指定的目录
    2. 脚本与url匹配时,执行相应的cgi程序
    3. web server收集程序输出,添加响应头返回给客户端
  4. cgi的问题?
    1. 先fork进程,然后执行,并发情况下基本不能用
    2. 对于解释型语言,需要加载配置文件和调用解释器初始化执行环境等

3. web server与fastcgi

  1. 快速通用网关接口(Fast Common Gateway Interface/FastCGI)致力于减少web server与cgi程序交互的开销
  2. php-fpm实现了fastcgi所带来的优势
    1. (动态,静态)进程生成来处理一连串的请求,与web server解耦
    2. Web server与FastCGI进程通过socket或tcp通信
    3. 平滑重启与启动
    4. slow log

4. web server与php-fpm进程通信

5. 参考文献

  1. 《深入理解计算机系统》-> 网络编程章节
  2. 《嗨翻c语言》-> 网络与套接字

源码链接

分享感触

今天分享完了,自己也是尽量放慢了语速,但是还是感觉大家没有融入进来,分享真的是一门学问呀!

工作这么多年,只分享过两次,自己的感觉是有好多东西想讲,但是真正开讲的时候大多都忘了,给人的感觉就是匆匆而过。

还有一点是下次分享的时候,可以考虑先把ppt给到大伙儿,因为每个人的学习方向都不一样,除了听众研究过,或者听众知识储备比较丰富,否则很难产生共鸣,大伙儿提前看看ppt可以对内容有更好的了解,也能让提问环节更加有意义,如果讲完了大家都没有问题,就没意思了。

没有问题就是最大的问题。

用心准备一个分享是很重要的态度,因为十几二十几个人听你分享半个小时,如果没有点儿收获是对大家的时间极大的不负责任。

如果有机会,还要更加用心的准备分享。

(完)