今天一同学请帮忙,要求实现用户上传文件后,交给服务端调用shell处理,处理分好几步,而且处理时间可能长达数分钟,并要将每一部处理反馈给用户,让用户知道当前进行到哪一步。
一种的方法是每隔很短的时间发送一个ajax请求,检测运算到哪一步,通过检测ajax返回来处理。
这样的好处是实现起来简单,但对客户端和服务端压力都比较大。
还有一种方法,就是发送一个ajax请求,一直处于等待状态,直到服务端有数据时再返回,这样可以显著降低请求数目,减少服务端压力。
js:
var step = 1,
getProgress = function(){
$.ajax({
type:"POST",
url:'getdata.php',
dataType:'text',
data:{step:step},
timeout:10*60*1000, //设置10分钟超时
success:function(data){
data = (new Function("return "+data))();
if(data.step == 1){
console.log("step 1 complete");
step++;
getProgress();
} else if(data.step == 2){
console.log("step 2 complete");
step++;
getProgress();
} else if(data.step == 3){
console.log("all complete!");
} else if(data == "error"){ //如果出错,则重试
getProgress();
}
},
error:function(){
alert("运算超时");
}
});
};
php:
if(!empty($_POST['step'])){
$step = $_POST['step'];
set_time_limit(0); //这里是关键,设置链接永不过时
if($step == 1){ //每一步由不同的shell处理,php会等shell执行完毕再继续执行
$sh = "./test1.sh";
} else if($step == 2){
$sh = "./test2.sh";
} else if($step == 3){
$sh = "./test3.sh";
}
$ret = exec($sh,$results,$rc);
if($rc == 0){
echo "{step:".$step."}";
} else {
echo "error";
}
}
分享到:
相关推荐
【标题】:“Web即时聊天(Ajax长轮询方式实现)” 在Web开发中,实现即时聊天功能是一项常见的需求,这通常涉及到服务器与客户端之间实时的数据交换。Ajax(Asynchronous JavaScript and XML)技术结合长轮询策略...
长轮询是Ajax的一种变体,主要用于实现实时通信。在传统的Ajax请求中,客户端发送请求到服务器,服务器处理完请求后立即返回响应。而在长轮询中,客户端发送请求后,服务器并不立即响应,而是保持连接打开状态,直到...
本示例“PHP+Ajax实现在线聊天长轮询”旨在教你如何创建一个简单的实时聊天系统,使得用户无需刷新页面就能接收到新消息。 **一、Ajax基础** Ajax(Asynchronous JavaScript and XML)是一种在不刷新整个网页的情况...
在客户端,我们可以使用jQuery的Ajax方法(如`$.ajax()`或`$.get()`)来实现长轮询。设置`async`参数为`true`以保持异步处理,同时设置适当的超时时间。当接收到服务器响应时,通过回调函数处理接收到的消息,并立即...
3. **编写 Webservice**:创建一个新的 ASMX Webservice 文件,实现长轮询逻辑。在服务端,我们需要监控数据变化,并在有新数据时立即返回。 4. **AJAX 调用**:在客户端,使用 JavaScript 和 AJAX 调用 Webservice...
传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据。种这种拉取数据的方式需要很短的时间间隔才能保证数据的精确度,但太短的时间间隔客服端会对服务器在短时间内发送出多个请求。 反转AJAX...
本示例中的“长轮询查看服务器CPU的利用率”是利用Ajax与Struts2框架结合,来实现实时监控服务器CPU使用情况的一个小Demo。下面我们将深入探讨这一技术及其相关知识点。 首先,长轮询是一种模拟双向通信的方法,它...
在ASP.NET中,实现长轮询通常涉及到以下几个关键点: 1. **异步处理**:为了防止因长时间等待数据更新而导致的阻塞,服务器端需要使用异步操作。在ASP.NET中,可以使用`AsyncController`或`async/await`关键字来...
该工程基于Ajax技术,采用客户端轮询服务器实现即时通信的简单Demo。 其中,com.gis.lp.webim.CClient作为主要的服务器端类,实现对信息的存储以及插入和读取:客户端发送的新信息通过该类的insertNews方法,将信息...
"Asp.net+Extjs+Ajax轮询进度条.rar"这个压缩包文件显然包含了一个使用这些技术实现的特定功能——一个实时显示服务器处理进度的进度条界面。下面,我们将详细探讨这些技术以及它们在实现轮询进度条中的应用。 Asp...
在这个实例中,我们将深入探讨如何利用这些技术实现长轮询(Long Polling)机制,这是一种优化实时通信的技术。 首先,ASP.NET是一种微软开发的用于构建Web应用程序的框架,它提供了丰富的服务器端控件和功能,使得...
长轮询(Long Polling)和Comet技术是Web实时通信(Real-Time Web Communication)中的两种重要机制,它们主要用于实现服务器向客户端的即时数据推送,而不再局限于传统的HTTP请求-响应模式。在本文中,我们将深入...
在Ajax中实现长轮询,客户端可以使用以下代码片段: ```html *" pageEncoding="UTF-8" isELIgnored="false" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!-- 其他相关头部信息 --> ...
1. 实时通信:可能使用WebSocket或AJAX长轮询实现即时消息传递。 2. 加密解密:为保护用户隐私,消息可能经过加密处理,如使用AES或RSA算法。 3. 文件传输:实现文件的上传、下载和分享功能,可能涉及断点续传和文件...