php实现异步操作
2012-07-10 16:25
555 查看
1. 问题:
要实现类似百度文库的效果,上传的文档全部要进行转换,包括缩略图,这些比较费时间,用户上传提交后不能让用户等待时间过长。用户提交后用户可以干别的事,后台一个程序来处理就可以了,最后数据自动插入到数据库中,当然用户等待的时间是越短越好,所有如果用定时器来执行保存到数据库的任务,那等待时间肯定会提高。所以用户提交后需要立即启动后台程序执行。
2. 尝试过的方法:
ajax 提交数据到 php ,然后php 通过fsockopen 的方式启用另一个php 来进行文档转换。问题是用户提交后页面一直不能动,
说明该进程处于被占用状态。和用ajax提交然后等待处理完成的效果是一样的,用户体验不好。
3. 解决方法:
(1)考虑到用户提交的参数比较多 php间异步通讯时不方便 如果文档转换失败 也没有记录,所以对用户的请求进行数据库保存,包括提交的参数。
(2) 创建一个php A.php 来进行文档转换并保存到数据库(要先从任务表中查到一些参数)。
(3) 创建一个脚本文件 B.sh ,来执行 A.php
#!/bin/bash
task_id=$1
cd /usr/local/nginx/html
/usr/local/php/bin/php /usr/local/nginx/html/A.php $task_id
(4)最后在用户请求的php 中调用脚本
这样的话,用户提交完后,当前进程不会被占用,用户就可以干其他事,用户体验得到了提升。
要实现类似百度文库的效果,上传的文档全部要进行转换,包括缩略图,这些比较费时间,用户上传提交后不能让用户等待时间过长。用户提交后用户可以干别的事,后台一个程序来处理就可以了,最后数据自动插入到数据库中,当然用户等待的时间是越短越好,所有如果用定时器来执行保存到数据库的任务,那等待时间肯定会提高。所以用户提交后需要立即启动后台程序执行。
2. 尝试过的方法:
ajax 提交数据到 php ,然后php 通过fsockopen 的方式启用另一个php 来进行文档转换。问题是用户提交后页面一直不能动,
说明该进程处于被占用状态。和用ajax提交然后等待处理完成的效果是一样的,用户体验不好。
$url_array = parse_url($url); $host = $url_array["host"]; $path = $url_array["path"]; $geturl = $path."?task_id=".$task_id; $fp = fsockopen($host , 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { $out = "GET $geturl HTTP/1.1\r\n"; $out .= "Host: $host\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); }
3. 解决方法:
(1)考虑到用户提交的参数比较多 php间异步通讯时不方便 如果文档转换失败 也没有记录,所以对用户的请求进行数据库保存,包括提交的参数。
(2) 创建一个php A.php 来进行文档转换并保存到数据库(要先从任务表中查到一些参数)。
(3) 创建一个脚本文件 B.sh ,来执行 A.php
#!/bin/bash
task_id=$1
cd /usr/local/nginx/html
/usr/local/php/bin/php /usr/local/nginx/html/A.php $task_id
(4)最后在用户请求的php 中调用脚本
$cmd = "/usr/local/nginx/html/B.sh"." ".$task_id." > /dev/null &"; exec($cmd);
这样的话,用户提交完后,当前进程不会被占用,用户就可以干其他事,用户体验得到了提升。
相关文章推荐
- 【代码】PHP 如何实现异步操作的研究
- 关于PHP实现异步操作的研究
- php异步操作(实现简单聊天功能)
- 关于PHP实现异步操作的研究
- php异步操作(实现简单聊天功能)
- PHP异步操作原理及实现
- 关于PHP实现异步操作的研究
- 前端通过AJAX提交数据,后台PHP处理数据实现异步操作基本流程
- PHP操作swoole来实现实时异步任务队列
- PHP利用fastcgi_finish_request()函数实现异步操作,提高响应速度
- PHP异步操作原理及实现
- 关于PHP实现异步操作的研究
- 关于PHP实现异步操作的研究
- PHP利用fastcgi_finish_request()函数实现异步操作,提高响应速度
- 关于PHP实现异步操作的研究
- PHP用iframe实现文件异步上传(无刷新)
- PHP对象链式操作实现原理分析
- php实现图片上传并进行替换操作
- PHP实现单链表翻转操作示例
- tornado中使用celery实现异步MySQL操作