本文介绍PHP在FastCGI模式下运行时FPM提供的方法:fastcgi_finish_request。在说这个方法之前,我们先来了解一下PHP常见的运行模式有哪些?PHP运行方式CGICommonGatewayInterface/CommonGatewayInterfaceCGI已经是老模式了,这几年已经很少用了。简介:每次有用户请求,都会先创建一个CGI子进程,然后处理请求,处理完后终止子进程。这是Fork-And-Execute模式。当用户请求数非常多时,会占用大量的内存、CPU时间等系统资源。缺点:在访问要求高的情况下,CGI进程fork会成为服务器很大的负担。FastCGI(residentCGI/Long-LiveCGI)用得比较多。简介:FastCGI是CGI的升级版,FastCGI就像一个常驻(long-live)的CGI。可以一直执行,只要激活了,每次fork都不会花时间。FastCGI是一种可扩展的高速接口,用于在HTTP服务器和动态脚本语言之间进行通信。Apache、Nginx和lighttpd等流行的HTTP服务器都支持FastCGI。原理:1.WebServer启动时加载FastCGI进程管理器(PHP-FPM);2、FastCGI进程管理器初始化并启动多个CGI解释器进程,等待来自WebServer的连接;3、当客户端请求到达WebServer时,FastCGI进程管理器选择并连接到一个CGI解释器;4、Web服务器将CGI环境变量和标准输入发送给FastCGI子进程php-cgi;5.FastCGI子进程完成处理后,将标准输出和错误信息从同一个连接返回WebServer。当FastCGI子进程关闭连接时,请求被处理。然后FastCGI子进程等待并处理来自FastCGI进程管理器的下一个连接。CLI模式介绍:PHP-CLI是PHPCommandLineInterface的缩写,意思是PHP运行在命令行上。Windows和Linux都支持PHP-CLI模式。模块模式介绍:模块模式以mod_php5模块的形式集成。mod_php5模块的作用是接收Apache传递过来的PHP文件请求,对这些请求进行处理,然后将处理后的结果返回给Apache。在Apache的配置文件httpd.conf中添加一行:LoadModulephp5_modulemodules/mod_php5.so以上只是简单的让大家了解一下,有兴趣的可以参考相关文章。接下来介绍一下:fastcgi_finish_request。fastcgi_finish_request当PHP以FastCGI方式运行时,FPM提供的方法:fastcgi_finish_request。官方地址:http://php.net/manual/zh/func...官方解释:Flush所有响应数据到客户端。个人理解:方法调用时,会发送响应并关闭连接,但不会结束PHP的运行。不明白的可以直接运行下面的代码://code:echodate('Y-m-dH:i:s',time())."\r\n";//将输出fastcgi_finish_request();set_time_limit(0);//避免超时报错ini_set('memory_limit','-1');//避免内存不足sleep(5);$time=date('Y-m-dH:i:s',time())."\r\n";echo$time;//不会输出file_put_contents('test.txt',$time,FILE_APPEND);执行该函数后,你会发现可以实现异步操作,提高响应速度。队列可以使用fastcgi_finish_request()函数进行整合,消息可以异步发送到队列中。由于该函数只存在于FastCGI模式下,考虑到可移植性,可以添加如下代码:一起学习
