很久以前,人们造出来一个机器人,它的英文名字叫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【简书看到的】的更多相关文章

  1. iOS离屏渲染简书

    更详细地址https://zsisme.gitbooks.io/ios-/content/chapter15/offscreen-rendering.html(包含了核心动画) GPU渲染机制: CP ...

  2. openlayers 3 简书

    1. 简书http://www.jianshu.com/p/6785e755fa0d 2. 文档 http://anzhihun.coding.me/ol3-primer/ch03/03-02.htm ...

  3. Python 2.7_发送简书关注的专题作者最新一篇文章及连接到邮件_20161218

    最近看简书文章关注了几个专题作者,写的文章都不错,对爬虫和数据分析都写的挺好,因此想到能不能获取最新的文章推送到Ipad网易邮箱大师.邮件发送代码封装成一个函数,从廖雪峰大神那里学的  http:// ...

  4. 从刚刚「简书」平台的短暂异常,谈Nginx An error occurred报错~

    09.26简书平台的短暂异常 An error occurred. Sorry, the page you are looking for is currently unavailable. Plea ...

  5. swift调用oc语言文件,第三方库文件或者自己创建的oc文件——简书作者

    Swift是怎样调用OC的第三方库的呢?请看下面详情: 情况一: 1.首先打开Xcode,iOS->Application->Single View Application, 选Next. ...

  6. iOS实现简书的账号识别方式(正则表达式)

    通过简书iOS客户端登录,我们会看到请输入手机号或者邮箱登录,但是我们随机输入1234567的时候,便会弹出手机格式不正确,同样也会识别我们的邮箱格式,那么我们在项目中怎么实现这种判断呢? 0E471 ...

  7. 倒戈了,转投简书 -------->

    深情自白 还记得数月前那个月黑风高的晚上,笔主偶遇简书,被那婀娜多姿的Markdown输出深深吸引不能自拔,从此立下毒誓要两边同时发布.然而天有不测风云(这边的太丑),前思后想寝食难安之后作出决定,正 ...

  8. iOS开发--Bison详解连连支付集成简书

    "最近由于公司项目需要集成连连支付,文档写的不是很清楚,遇到了一些坑,因此记录一下,希望能帮到有需要的人." 前面简单的集成没有遇到什么坑,在此整理一下官方的集成文档,具体步骤如下 ...

  9. 仿简书、淘宝等等App的View弹出效果

    昨天用简书App的时候觉得这个View的弹出效果特别好,而且非常平滑,所以我就尝试写了一个,和简书App上的效果基本一致了: 下面开始讲解: 1.首先我们要知道这个页面有几个View?这个页面其实有四 ...

  10. 简书APP

    找第三方的时候看到简书这个APP,上网搜了一下发现网页版非常的干净,开头的一篇文章就是"你没实力就别心存侥幸",看完也挺有有同感的.文章网址:http://www.jianshu. ...

随机推荐

  1. #leetcode刷题之路6- Z 字形变换

    将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列.比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:L     C     I ...

  2. C++创建People类--练习

    题目描述 /*设计一个用于人事管理的People(人员)类.*/ /* 考虑到通用性,这里只抽象所有类型人员都具有的属性: number(编号).sex(性别).birthday(出生日期).id(身 ...

  3. 将hexo放到github仓库上

    完成了hexo的安装后, 我们只能在本地访问. 因此我们将它放到github上, 方便我们随时随地的用网址访问. 在Blog文件夹目录下输入: cnpm install --save hexo-dep ...

  4. 【前行&赛时总结】◇第2站&赛时·8◇ Atcoder ABC-109

    [第2站&赛时·8] ABC-109 把最后一题题意理解错了……在第二组数据卡了好久(然而并不知道是special judge)QwQ 最终AK,速度慢了一些 Rank:357 Rating: ...

  5. sqlachemy详解

    实习期老大让我学Python...学了很久了好吗,不过确实对其中的一些原理性的东西还不够深入. 比如今天要说的sqlachemy,结合网上做些总结吧 ORM 全称 Object Relational ...

  6. NC使用技巧

    1. NC 1.1概述 1.1.1 优点: 1)网络工具中的瑞士军刀 2)侦听模式/传输模式. 3)可代替telnet获取banner信息. 4)传输文件/目录. 5)传输文本信息. 6)加密传输文件 ...

  7. Linux分享笔记:系统状态检测命令小结

    作为一名合格的运维人员,要能很好地了解Linux服务器,要能熟练查看Linux系统的运行状态.以下是常用到的Linux系统状态检测命令. 1. ifconfig:用于获取网卡配置与网络状态等信息.通常 ...

  8. php GD 圆图 -处理成圆图片

    <?php /** * 处理成圆图片,如果图片不是正方形就取最小边的圆半径,从左边开始剪切成圆形 * @param string $imgpath [description] * @return ...

  9. Solr简单总结

    Solr 运行Solr服务 方式一:Jetty服务器启动Solr 进入solr-4.10.2/example目录 打开命令行,执行java –jar start.jar命令,即可启动Solr服务 打开 ...

  10. 微信小程序-通知公告滚动提示

    wxml如下: <view class='scroll_view_border'> <view class="srcoll_view" bindtap=" ...