tomcat and PHP

来源:互联网 发布:淘宝卖家 编辑:程序博客网 时间:2024/06/05 20:03

一、PHP:

修改了系统环境变量、php-fpm.conf、php.ini是否需要重启PHP生效?

1、CGI:公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。具体来说:web server(比如说nginx)只是内容的分发者。比如,如果请求/index.html,那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。如果现在请求的是/index.php,根据配置文件,nginx知道这个不是静态文件,需要去找PHP解析器来处理,那么他会把这个请求简单处理后交给PHP解析器。Nginx会传哪些数据给PHP解析器呢?url要有吧,查询字符串也得有吧,POST数据也要有,HTTP header等等,CGI就是规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议。当web server收到/index.php这个请求后,会启动对应的CGI程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程。web server再把结果返回给浏览器。

2、Fastcgi:从上面可以看出,CGI有一个很大的问题,每次请求都需要PHP解析器去解析php.ini文件,初始化执行环境,标准的CGI对每个请求都会执行这些步骤,导致处理每个请求的时间都会比较长。这时候就需要采用Fastcgi管理:首先,Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是fastcgi的对进程的管理。

3、php-fpm:php的解析器php-cgi只是个CGI程序,本身只能解析请求,返回结果,并不会进程管理,这时就 需要一些能够调度php-cgi进程的程序,php-fpm就是实现这样的功能,同时,php-fpm可以实现php-cgi进程的无法平滑重启加载php.ini配置的问题,php-fpm通过新的worker用新的配置的机制,解决了修改php.ini等配置文件时平滑启动功能。

下面来验证下php-fpm的平滑启动:

1、首先在系统环境变量和php-fpm.conf文件添加环境变量如下:



2、首先reload php,通过phpinfo查看环境变量是否生效:可以看到环境变量并没有生效。


3、restart php,查看环境变量:可以看到环境变量生效了


4、我们修改php-fpm.conf的值,再reload php:可以看到php通过平滑启动加载了配置生效



5、修改系统环境变量exprot CESHI='sina.cn',reload php:环境变量并没有生效


6、restart php后:环境变量生效:


结论:php-fpm实现了修改php.ini或者php-fpm.conf配置时,通过reload平滑重启加载配置,当系统环境变量改变时,要通过restart的方式才能使系统环境在php生效。


二、tomcat数据传输流程:

Tomcat Server处理一个http请求的过程
假设来自客户的请求为:
http://localhost:8080/wsota/wsota_index.jsp
1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为”"的Context去处理)
7) path=”/wsota”的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet  
8)Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
10)Context把执行完了之后的HttpServletResponse对象返回给Host
11)Host把HttpServletResponse对象返回给Engine
12)Engine把HttpServletResponse对象返回给Connector
13)Connector把HttpServletResponse对象返回给客户browser

0 0