PHP+jQuery模拟一个进程,动态获取长时间运行的进程

来源:互联网 发布:微商货源源码 编辑:程序博客网 时间:2024/04/30 15:37

(1)

<?php/* * 代码段被命名为long_process.php,这模拟了一个长进程,它有一个for循环,会循环10次,而且在每次循环后会有1秒的睡眠时间。 * 最重要的是,这里我们用了一个session变量$_SESSION[“progress”]存住了进程,另外,不要忘了在每一次循环后要使用session_write_close()函数, * 因为会话数据通常在的终端关闭后存储,不需要调用session_write_close()函数,但因为会话数据被锁住从而防止同时的写操作。 * 当你还在同时使用框架集的时候,你就会看到因为这种锁特性,框架是一个一个加载的,你可以在所有的session变量完成改变后, * 终止会话,从而缩短加载框架的总时间。 * */for($i=1;$i<=10;$i++){    session_start();    $_SESSION["progress"] = $i;    session_write_close();    sleep(1);}?>

(2)

<?php/* * process.php这个完成起来比较简单,就是在客户端输出进程,这里的progress变量是在long_process.php中被更新的session变量。 * */session_start();echo $_SESSION["progress"];?>

(3)

/* * 它是进入模拟进程的入口,我省略了剩余的部分。 * 它利用AJAX向服务器发出了两个请求,一个是初始化长进程,另一个是轮询服务器捕获进程,获得进程后,会更新在页面上的显示。 * */<script type="text/javascript">    //start the long running process    $.ajax({        url: 'long_process.php',        success: function(data){        }    });    //start receiving progress    function getProgress(){        $.ajax({            url: 'process.php',            success: function(data){                $("#progress").html(data);                if(data<10){                    getProgress();                }            }        });    }    getProgress();</script><div id="progress"></div>






0 0