php实现异步操作
来源:互联网 发布:mysql.createpool 编辑:程序博客网 时间:2024/06/06 12:26
1. 问题:
要实现类似百度文库的效果,上传的文档全部要进行转换,包括缩略图,这些比较费时间,用户上传提交后不能让用户等待时间过长。用户提交后用户可以干别的事,后台一个程序来处理就可以了,最后数据自动插入到数据库中,当然用户等待的时间是越短越好,所有如果用定时器来执行保存到数据库的任务,那等待时间肯定会提高。所以用户提交后需要立即启动后台程序执行。
2. 尝试过的方法:
3. 解决方法:
(1)考虑到用户提交的参数比较多 php间异步通讯时不方便 如果文档转换失败 也没有记录,所以对用户的请求进行数据库保存,包括提交的参数。
(2) 创建一个php A.php 来进行文档转换并保存到数据库(要先从任务表中查到一些参数)。
(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/bashtask_id=$1cd /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操作swoole来实现实时异步任务队列
- php实现异步处理
- PHP异步实现
- C#实现异步操作
- Ajax实现异步操作
- php 服务器端实现异步请求
- PHP实现异步调用方法
- PHP异步调用实现方式
- php fsockopen实现异步请求
- php 异步websocket客户端实现
- 文件异步操作的实现
- WPF 实现异步服务操作
- 简述handler实现异步操作
- 去掉左右相同的词项
- 常用SQL语句整理(一)
- MediaWiki编辑工具
- 有关指针的15个面试题
- JAVA生成UUID主键值
- php实现异步操作
- 事件驱动模式
- Not possible to carry out conversion
- 使用Audio Queue Services 播放和录制音频
- expdp/impdp 使用手册
- 如何学习C语言(5)-----程序员之路
- Spring,hibernate,struts的面试笔试题(含答案)
- sql使用逗号显示金额
- Oracle中Decode()函数使用技巧