PHP利用fscckopen实现异步处理
用fscckopen实现异步调用php , 这样客户端请求时就可以秒开,无阻塞,把一些耗时的任务放在后台运行。具体请参考原文:使用fscok实现异步调用PHP
文件test.php
我简化成只用GET方法。方便理解。并且调用同一页面,逻辑上调用其它页面可能会更好一点。不过测试没发现问题。
<?php ignore_user_abort(TRUE); //如果客户端断开连接,不会引起脚本abort. set_time_limit(0);//取消脚本执行延时上限 if($_GET){ sleep(10); writelog("get=" . $_GET['get']); //10秒后创建log.txt exit; } $url="http://127.0.0.1/test.php?get=1"; triggerRequest($url); echo "success"; function triggerRequest($url){ $method = "GET"; //可以通过POST或者GET传递一些参数给要触发的脚本 $url_array = parse_url($url); //获取URL信息,以便平凑HTTP HEADER $port = isset($url_array['port'])? $url_array['port'] : 80; $fp = fsockopen($url_array['host'], $port, $errno, $errstr, 30); if (!$fp) { return FALSE; } $getPath = $url_array['path'] ."?". $url_array['query']; $header = $method . " " . $getPath; $header .= " HTTP/1.1\r\n"; $header .= "Host: ". $url_array['host'] . "\r\n"; //HTTP 1.1 Host域不能省略 $header .= "Connection:Close\r\n\r\n"; fwrite($fp, $header); //echo fread($fp, 1024); //我们不关心服务器返回. 关闭这里才不会阻塞 fclose($fp); return true; } function writelog($message) { $path = './log.txt'; $handler = fopen($path, 'w+b'); if ($handler) { $success = fwrite($handler, $message); fclose($handler); } }
在php-fpm fastcgi下,也可以用fastcgi_finish_request实现异步非阻塞。 请参考:使用fastcgi_finish_request提高页面响应速度
有点相关的文章
- WordPress 中文文档 (0.500)
- 让Google给你的网站加速,快马加鞭,节省流量 (0.500)
- Premiumnews:一款优秀的3 栏 CMS 主题 (0.500)
- WPCleaner-删除修订版或草稿,减小空间 (0.500)
- 为你的wordpress添加留言本(两种方法) (0.500)
- 收藏:D3.js + NVD3.js可视化库 (RANDOM - 0.500)
过来看看、感谢分享
过来踩踩
谢谢博主,博主太好人了
强烈支持,博主万岁!
楼主:你得到最牛逼的奖项是什么?
回复:国际花式撸管马拉松冠军。
不错,过来学习一下;
http://www.ah-flower.cn
[ali元宝] 东西太多不知道从哪里入手