php长连接处理整理
来源:互联网 发布:大数据分析关键技术 编辑:程序博客网 时间:2024/06/05 17:26
每次我们访问PHP脚本的时候,都是当所有的PHP脚本执行完成后,我们才得到返回结果。如果我们需要一个脚本持续的运行,那么我们就要通过php长连接的方式,来达到运行目的。
一般php环境为apache+php+linux,但是由于apache对php连接都有时间限制,一般超过这个连接时间apache服务器会自动断掉连接。
方法一
这种情况下比较简单方便的方式就是在php页面中设置set_time_limit(0)(当然也可以在php.ini配置文件中设置,但是这样对整个环境产生影响,毕竟我们并不想对所有连接都可以长时间连接,影响服务性能)
每个PHP脚本都限制了执行时间,所以我们需要通过 set_time_limit 来设置一个脚本的执行时间为无限长,然后使用 flush() 和 ob_flush() 来清除服务器缓冲区,随时输出脚本的返回值。
如下例子:
- <?php
- header("Content-Type: text/plain");
- set_time_limit(0);
- while( true )
- {
- // 持续执行的脚本
- flush();
- ob_flush();
- sleep(5);
- }
- ?>
当我们执行后,每隔5秒钟,我们会执行一次,通过这一方法,我们可以完成很多功能,例如后台监控程序,定时执行功能,日志分析,数据整理等耗时的操作。
下面再看一个简单例子,官方文档中例子
- <?php
- header('Content-type: text/plain');
- echo date("H:m:s"), "/n";
- set_time_limit(30);
- for ($i = 0; $i < 1000; $i++)
- {
- echo date("H:m:s"),"/n";
- for ($r = 0; $r < 100000; $r++){
- $X.= tan(M_LNPI+log(ceil( date("s")*M_PI*M_LNPI+100)));
- }
- ob_flush();
- flush();
- }
- echo "work! $x";
- ?>
方法二
在linux环境下,通过cron配置执行脚本,就是通过linux下php命令执行php文件,这种方式是在php单独环境下执行,不受apache环境限制,可以执行长时间运行的程序 (同样还有j2ee中,jsp长时间执行就会出现断开连接情况,当然通过servlet可以后台一直执行,但是毕竟需要配置web.xml还需要重启环境,不是很方便,这是就可以单独执行java程序,让后通过cron配置linux后台定时执行)
例如:
10 5 * * * /usr/bin/php /usr/local/run/back_run.php
每天5点10分执行back_run.php脚本程序,这时可以执行任意长时间,执行完后进程自动销毁,执行的时候,可以通过ps -ef|grep back_run.php找到执行中的进程。
该方式可以实现很多php批处理功能。
- php长连接处理整理
- php长连接处理整理
- php 长连接--php
- PHP实现长连接
- PHP实现长连接
- php长连接
- PHP长连接实现
- php长连接(笔记)
- php 实现长连接
- php curl长连接
- php模拟长连接
- php 实现长连接
- socket(php)(不确定是否是长连接)(一次连接,多次接受,发送特定字符时关闭连接)整理版本3
- php pconnect 长连接原理
- php长连接和短连接
- php长连接和短连接
- PHP长连接导致mysql连接数打满
- php长连接和短连接
- 总结了几种设置UITableView的cell动态高度的方法
- 使用Python获得本机IP地址
- Windows 7下安装配置PHP+Apache+Mysql
- V4L2摄像头获取单幅图片测试程序
- Visual Studio统计有效代码行数
- php长连接处理整理
- Apache+php+mysql在windows下的安装与配置图解
- timer linux编程学习
- 关于 ORACLE 大数据量操作 的调优
- 《设计模式——可复用面向对象软件的基础》学习笔记(1.2)Design patterns in Smalltalk MVC
- ARM未来世界开启传送门6-预备第2天
- 十年的程序员生涯
- oracle学习记录之一
- 好文章记录-为防止丢失