`
指甲刀X
  • 浏览: 35183 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

ajax长轮询的实现

阅读更多

 今天一同学请帮忙,要求实现用户上传文件后,交给服务端调用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长轮询方式实现)” 在Web开发中,实现即时聊天功能是一项常见的需求,这通常涉及到服务器与客户端之间实时的数据交换。Ajax(Asynchronous JavaScript and XML)技术结合长轮询策略...

    php-Ajax长轮询

    长轮询是Ajax的一种变体,主要用于实现实时通信。在传统的Ajax请求中,客户端发送请求到服务器,服务器处理完请求后立即返回响应。而在长轮询中,客户端发送请求后,服务器并不立即响应,而是保持连接打开状态,直到...

    PHP+Ajax实现在线聊天长轮询

    本示例“PHP+Ajax实现在线聊天长轮询”旨在教你如何创建一个简单的实时聊天系统,使得用户无需刷新页面就能接收到新消息。 **一、Ajax基础** Ajax(Asynchronous JavaScript and XML)是一种在不刷新整个网页的情况...

    javascript和jQuery实现网页实时聊天的ajax长轮询

    在客户端,我们可以使用jQuery的Ajax方法(如`$.ajax()`或`$.get()`)来实现长轮询。设置`async`参数为`true`以保持异步处理,同时设置适当的超时时间。当接收到服务器响应时,通过回调函数处理接收到的消息,并立即...

    基于 AJAX和Webservice 的长轮询方式ServerPush技术模拟

    3. **编写 Webservice**:创建一个新的 ASMX Webservice 文件,实现长轮询逻辑。在服务端,我们需要监控数据变化,并在有新数据时立即返回。 4. **AJAX 调用**:在客户端,使用 JavaScript 和 AJAX 调用 Webservice...

    jquery与php结合实现AJAX长轮询(LongPoll)

    传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据。种这种拉取数据的方式需要很短的时间间隔才能保证数据的精确度,但太短的时间间隔客服端会对服务器在短时间内发送出多个请求。 反转AJAX...

    长轮询查看服务器cpu的利用率

    本示例中的“长轮询查看服务器CPU的利用率”是利用Ajax与Struts2框架结合,来实现实时监控服务器CPU使用情况的一个小Demo。下面我们将深入探讨这一技术及其相关知识点。 首先,长轮询是一种模拟双向通信的方法,它...

    asp.net+jquery长轮询实例

    在ASP.NET中,实现长轮询通常涉及到以下几个关键点: 1. **异步处理**:为了防止因长时间等待数据更新而导致的阻塞,服务器端需要使用异步操作。在ASP.NET中,可以使用`AsyncController`或`async/await`关键字来...

    基于客户端轮询服务器思想实现的即时通信Demo

    该工程基于Ajax技术,采用客户端轮询服务器实现即时通信的简单Demo。 其中,com.gis.lp.webim.CClient作为主要的服务器端类,实现对信息的存储以及插入和读取:客户端发送的新信息通过该类的insertNews方法,将信息...

    Asp.net+Extjs+Ajax轮询进度条.rar

    "Asp.net+Extjs+Ajax轮询进度条.rar"这个压缩包文件显然包含了一个使用这些技术实现的特定功能——一个实时显示服务器处理进度的进度条界面。下面,我们将详细探讨这些技术以及它们在实现轮询进度条中的应用。 Asp...

    ASP.NET+MVC+JQ长轮询实例

    在这个实例中,我们将深入探讨如何利用这些技术实现长轮询(Long Polling)机制,这是一种优化实时通信的技术。 首先,ASP.NET是一种微软开发的用于构建Web应用程序的框架,它提供了丰富的服务器端控件和功能,使得...

    长轮询Prototype+comet源代码

    长轮询(Long Polling)和Comet技术是Web实时通信(Real-Time Web Communication)中的两种重要机制,它们主要用于实现服务器向客户端的即时数据推送,而不再局限于传统的HTTP请求-响应模式。在本文中,我们将深入...

    关于心跳程序-Web 通信之长连接、长轮询(long polling)

    在Ajax中实现长轮询,客户端可以使用以下代码片段: ```html *" pageEncoding="UTF-8" isELIgnored="false" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!-- 其他相关头部信息 --> ...

    基于PHP的实现的跟QQ和MSN类似的BICQ源码.zip

    1. 实时通信:可能使用WebSocket或AJAX长轮询实现即时消息传递。 2. 加密解密:为保护用户隐私,消息可能经过加密处理,如使用AES或RSA算法。 3. 文件传输:实现文件的上传、下载和分享功能,可能涉及断点续传和文件...

Global site tag (gtag.js) - Google Analytics