ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 1、webserver处理动态文件的方式 * 模块化即把处理动态文件的引擎当成模块集成进webserver中 * CGI通信协议 ## 2、实现方式 ### 2.1、模块化 ![3、Webserver如何处理动态文件](http://p3.pstatp.com/large/pgc-image/5b9b9266c5534118a8d294c5efd334a9) a、过程描述: * 客户端发起动态文件请求 * webserver接收到请求,根据其配置文件的内容,交由至对应的动态模块处理 b、要点: 把动态处理模块当成是webserver的一个子模块。 ### 2.2、CGI 通用网关接口(Common Gateway Interface/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI描述了服务器和请求处理程序之间传输数据的一种标准。 ![3、Webserver如何处理动态文件](http://p9.pstatp.com/large/pgc-image/a8cd1055148442c5a29b84d96b24093e) a、过程描述: * 客户端发起动态文件请求 * webserver接收到请求,交由至对应的CGI处理 * CGI创建子进程,由其处理该请求内容,并等待结果返回。 b、要点: CGI这种每次调用都需要创建子进程的方式。一来是创建子进程的开销昂贵,二来是经不起大并发量。 ### 2.3、fastCGI 它是 CGI 的增强版本,采用master-worker的方式,改进了CGI中(fork-execute-exit)的诟病,用于减少 Server 与 CGI 应用之间的交互开销,从而使 Server 可以同时处理更多的请求。 ![3、Webserver如何处理动态文件](http://p1.pstatp.com/large/pgc-image/2bdb6798ad0a461ab8f0ba5e13098e2c) a、过程描述: * fastcgi启动,根据其配置文件,创建一个master和n个worker进程,开始监听并等待请求 * 客户端发起动态文件请求 * webserver接收到请求,根据配置文件,通过socket转发至对应的fastcgi请求,并等待结果返回 b、要点: * 通过socket通信方式,连接了 webserver和fastcgi。 * 其次,fastcgi先创建工作进程的方式,避免了CGI(fork-execute-exit)的诟病。并根据采用master和worker的方式,master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则一般有多个(具体数量根据实际需要配置),每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方 ## 3、协议实现 ### 3.1、php-cgi php-cgi是php的解释器,是cgi协议的实现 ### 3.2、php-fpm php-fpm是管理和实现fastCGI的管理器