PHP与webserver【简书看到的】
很久以前,人们造出来一个机器人,它的英文名字叫web server,中文名叫网页服务器。(为了简写,下文称web server为server)
server的工作很简单,就是做内容的分发。
初期的sever功能很简单,只能处理静态请求,当客户端请求/index.html的时候,server去文件系统里面找到对应的index.html文件,然后返回给客户端,这个时期的server就像一个仓库管理员,别人要啥,他给啥。
可是这样的机器人很明显不能满足人们的需求,因为sever机器人只能处理静态请求,却不能处理动态请求,如/index.php或者/index.java,这就好像它是服务员,只能端出做好的红烧肉,却不能自己做出红烧肉。
为了能够让server机器人处理动态请求(做出红烧肉),聪明的人类开始了他们的发明,于是他们在server机器人的肚子上挖出了一个长方形的洞,取名叫做接口,这个接口上只要插入制作红烧肉的智能芯片,server机器就能做红烧肉,插入制作烤鱼的芯片,server机器就能做烤鱼。
为了体现专业性,人们给sever机器人肚子上面的洞,这个接口,取了一个高大上的名字,叫做CGI(全称是是Command Gateway Interface,通常翻译为公共网关接口),通过这个接口,其他的应用程序可以与server机器人进行交互。
制作红烧肉的芯片,叫做php解析器。
制作红烧肉的芯片,叫做java解析器。
当然,与server进行交互的应用程序除了php解析器,java解析器,还有很多。
综上,sever主要工作内容:
(1)处理静态请求,当客户端请求静态文件的时候,如/a.html,web server会去文件系统中找到a.html这个文件,发送给浏览器。
(2)处理动态请求,当客户端请求/a.php的时候,web server会根据自己的配置文件(http.conf或者nginx.conf)得知,该请求的是动态数据,于是web server需要把请求交给PHP解析器(php-cgi)来处理,webserver与php通信需要遵循cgi接口定义的协议,将url地址,header消息头,post/get数据等一系列内容按照一定的格式传给php解析器(即php-cgi)处理,php解析器处理完成之后返回给web server,最后web server接到结果返回给客户端。
好景不长,问题来了
CGI接口的出现,让server能够处理动态请求,让server的功能有另一个飞跃。
每天,客户端与server就这样不断的循环往复:

(1)客户端发送请求给sever
(2)server接收请求和数据
(3)server会fork一个进程来启动对应的CGI程序(这里主要是php-cgi,PHP的解释器是php-cgi)
(4)php-cgi会解析php.ini文件,初始化执行环境,并处理请求,解析CGI接口传来的数据
(5)php-cgi以CGI接口规定的格式返回server处理后的结果
(6)server将结果返回客户端。
可是,好景不长,一心追求完美的人类,发现了一个问题。
每次客户端发起新的请求,server端都会fork一个进程出来启动php-cgi,而php-cgi却又每次都会进行一次初始化的工作(解析php.ini文件,初始化执行环境),人们觉得这样的重复实在效率太低,不仅很消耗时间,还很耗资源,于是想出来一个新的方案。
新的方案来临,FASTCGI的诞生
FASTCGI和CGI一样也是接口,是CGI的升级方案。
当server启动的时候,fastcgi会先启一个master进程(这里是php-fpm,主要用来管理php-cgi),解析php.ini,初始化执行环境,然后再启动多个worker(php-cgi)。当请求过来时,master会传递给一个worker(php-cgi),然后立即可以接受下一个请求,同时,当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些。

这种fastcgi对进程的管理,避免了重复的劳动,提高了性能,缩短了处理的时间,节省了资源,也就成为了目前主流的通信交互方式。
PHP与webserver【简书看到的】的更多相关文章
- iOS离屏渲染简书
更详细地址https://zsisme.gitbooks.io/ios-/content/chapter15/offscreen-rendering.html(包含了核心动画) GPU渲染机制: CP ...
- openlayers 3 简书
1. 简书http://www.jianshu.com/p/6785e755fa0d 2. 文档 http://anzhihun.coding.me/ol3-primer/ch03/03-02.htm ...
- Python 2.7_发送简书关注的专题作者最新一篇文章及连接到邮件_20161218
最近看简书文章关注了几个专题作者,写的文章都不错,对爬虫和数据分析都写的挺好,因此想到能不能获取最新的文章推送到Ipad网易邮箱大师.邮件发送代码封装成一个函数,从廖雪峰大神那里学的 http:// ...
- 从刚刚「简书」平台的短暂异常,谈Nginx An error occurred报错~
09.26简书平台的短暂异常 An error occurred. Sorry, the page you are looking for is currently unavailable. Plea ...
- swift调用oc语言文件,第三方库文件或者自己创建的oc文件——简书作者
Swift是怎样调用OC的第三方库的呢?请看下面详情: 情况一: 1.首先打开Xcode,iOS->Application->Single View Application, 选Next. ...
- iOS实现简书的账号识别方式(正则表达式)
通过简书iOS客户端登录,我们会看到请输入手机号或者邮箱登录,但是我们随机输入1234567的时候,便会弹出手机格式不正确,同样也会识别我们的邮箱格式,那么我们在项目中怎么实现这种判断呢? 0E471 ...
- 倒戈了,转投简书 -------->
深情自白 还记得数月前那个月黑风高的晚上,笔主偶遇简书,被那婀娜多姿的Markdown输出深深吸引不能自拔,从此立下毒誓要两边同时发布.然而天有不测风云(这边的太丑),前思后想寝食难安之后作出决定,正 ...
- iOS开发--Bison详解连连支付集成简书
"最近由于公司项目需要集成连连支付,文档写的不是很清楚,遇到了一些坑,因此记录一下,希望能帮到有需要的人." 前面简单的集成没有遇到什么坑,在此整理一下官方的集成文档,具体步骤如下 ...
- 仿简书、淘宝等等App的View弹出效果
昨天用简书App的时候觉得这个View的弹出效果特别好,而且非常平滑,所以我就尝试写了一个,和简书App上的效果基本一致了: 下面开始讲解: 1.首先我们要知道这个页面有几个View?这个页面其实有四 ...
- 简书APP
找第三方的时候看到简书这个APP,上网搜了一下发现网页版非常的干净,开头的一篇文章就是"你没实力就别心存侥幸",看完也挺有有同感的.文章网址:http://www.jianshu. ...
随机推荐
- Python——判断
if语句简介 说明 使用if语句判断的条件表达式的结果只有两种:Ture和False,结果为True则执行if语句中的代码,否则不执行,例: name = "smith" if n ...
- Vue 2.0 组件库总结
UI组件 element - 饿了么出品的Vue2的web UI工具套件 Vux - 基于Vue和WeUI的组件库 mint-ui - Vue 2的移动UI元素 iview - 基于 Vuejs 的开 ...
- php-5.6.26源代码 - hash存储结构 - 初始化
初始化 有指定析构函数,在销毁hash的时候会调用,如:“类似extension=test.so扩展”也是存放在HashTable中的,“类似extension=test.so扩展”的module_s ...
- 继上一篇bootstrap框架(首页)弄的资讯页面
还是和上一篇首页一样给出每一步的注解: 做的有点简单,但是,以后还是会加深的.毕竟是初学者嘛! <html lang="zh-cn"> <head> ...
- mysql计算排名
mysql计算排名,获取行号rowno 学生成绩表数据 SELECT * FROM table_score ORDER BY score DESC; 获取某个学生成绩排名并计算该学生和上一名学生成绩差 ...
- ruby 数据类型Number
Ruby支持的数据类型包括基本的Number.String.Ranges.Symbols,以及true.false和nil这几个特殊值,同时还有两种重要的数据结构——Array和Hash 数值类型(N ...
- C# 设置程序最小化到任务栏右下角,鼠标左键单击还原,右键提示关闭程序
首先设置程序最小化到任务栏右下角 先给窗口添加一个notifyIcon控件 为notifyIcon控件设置ICO图标(不设置图标将无法在任务栏显示) 给notifyIcon控件添加点击事件 然后是最小 ...
- ESP32 LyraT音频开发板试玩(一):搭建开发环境
我是卓波,很高兴你来看我的博客. 系列文章: ESP32 LyraT音频开发板试玩(一):搭建开发环境 ESP32 LyraT音频开发板试玩(二):播放音乐 关于ESP32的开发环境搭建,官方有教程, ...
- 20145202马超《网络对抗》Exp4 恶意代码分析
20145202马超<网络对抗>Exp4 恶意代码分析 1.实验后回答问题 (1)总结一下监控一个系统通常需要监控什么.用什么来监控. 虽然这次试验的软件很好用,我承认,但是他拖慢了电脑的 ...
- 从C到C++ (2)
从C到C++ (2) 一. C++中增加了作用域标示符 :: 1. 用于对局部变量同名的全局变量进行访问. 2. 用于表示类成员. 二. new.delete运算符 1. ...