php+ajax 长轮询

最近在做项目时要做一个即时提醒功能,第一次做没思路。就百度了下。发现好多都说的模糊不清。我整理了下发出来大家指点下

jquery 代码:

这里使用使用ajax请求test页面获取success的值,请求超时时间为20秒。在20秒内若没数据返回则一直保持连接


$(function(){
$("#btn").bind(‘click‘,{btn:$(‘#btn‘)},function(e){
$.ajax({
type: ‘POST‘,
dataType: ‘json‘,
url: ‘test.php‘,
timeout: ‘20000‘,//请求超时时间
data: {time: ‘2000000‘},// 每次请求等待时间
success: function(data,status){
if(data.success == ‘1‘){
$("#msg").append(‘<br>[有数据]‘+data.text);
e.data.btn.click();
}
// 未从服务器中获的数据
if(data.success == ‘0‘){
$("#msg").append(‘<br>[无数据]‘);
e.data.btn.click();
}
},
// ajax超时,继续查询
error:function(XMLHttpRequest,textStatus,errorThrown){
if(textStatus == "timeout"){
$("#msg").append(‘超时‘);
e.data.btn.click();
}
}
});
});
});

php代码:


if(empty($_POST[‘time‘])) exit();
set_time_limit(0);// 无限请求超时时间
usleep($_POST[‘time‘]);// 等待时间
while(true){
$i++;
$rand = rand(1,999);
if($rand < 150){
$arr = array(‘success‘=>‘1‘,‘name‘=>‘有值‘,‘text‘=>$rand);
echo json_encode($arr);
exit();
}else{
$arr = array(‘success‘=>‘0‘,‘name‘=>‘无值‘,‘text‘=>$rand);
echo json_encode($arr);
exit();
}
}

时间: 2024-12-10 16:03:31

php+ajax 长轮询的相关文章

php+ajax长轮询实现web即时聊天

web im的实现方式有很多种: 1.普通轮询,原理通过js定时重复发送ajax请求服务端,获取数据后显示. 2.长轮询,ajax请求服务端,服务端有数据会立即返回,服务端无数据时,会一直等待,直到有数据了才立即范围. 3.socket长连接. 特征分析: 方法1:实现起来最容易,定时重复请求服务端会产生无意义的http连接,消耗服务端资源,实时性较差. 方法2:实现起来较容易,会减少无效的ajax请求产生的http连接,能即时返回数据,但服务端会一直挂着,会消耗一定的资源,处理并发能力不强,比

用大白话揭开Ajax长轮询(long polling)的神秘面纱

在看这篇Ajax长轮询之前可以先看看Ajax轮询技术(没有长),有助于理解: Ajax长轮询属于Ajax轮询的升级版,在客户端和服务端都进行了一些改造,使得消耗更低,速度更快. "不间断的通过Ajax查询服务端". 来,小二,先上代码~: Reception.html //客户端 <html> <head> <title></title> <script src="http://lib.sinaapp.com/js/jqu

ajax长轮询 (转)

javaWeb项目中需要一个实时提醒的功能,也就是某人做了某一操作,可以立即提醒到当前在线的用户 最开始想在用户做了操作后,储存一个状态到数据库中然后用每隔几秒用ajax去请求后台查询数据库来确定是否显示提醒窗口 提醒窗口使用jquery easyui 的messager 在右下角弹出如下图 后查得可通过AJAX长轮询的方法来解决频繁对后台的请求,进一步减小压力 在实现过程发现AJAX的多次请求会出现多线程并发的问题又使用线程同步来解决该问题 个人对ajax长轮询的一点愚见 ajax请示后台时,

ajax长轮询实现即时聊天室

前段js: //处理ajax长轮询 $(function(){ ask_order(); function ask_order(){ var ask_action = "{:U('index/order_commet',array('time'=>10,'desk_id'=>$desk_id))}"; $.ajax({                    type:"GET",                    dataType:"jso

PHP实现Ajax长轮询

传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据.种这种拉取数据的方式需要很短的时间间隔才能保证数据的精确度,但太短的时间间隔客服端会对服务器在短时间内发送出多个请求. 反转AJAX,就是所谓的长轮询或者COMET.服务器与客服端需要保持一条长时间的请求,它使得服务器在有数据时可以返回消息给客户端. 这里使用AJAX请求data.php页面获得'success'的值,请求的时间达到80秒.在这80秒中若没有从服务端返回'success'则一直保持连接状态,直到有数据返回

继续ajax长轮询解决方案--递归

如果使用for,会有一种情况发生,就是ajax的执行会大于其他的动作的执行,那么这样的一段代码就不能实现了 for(var i=0;i<20;i++){ console.log('你好') $.ajax(--) } 怎么办呢? 递归吧,很多老程序员都是这样干的,于是,代码: currentIndex = 0; function ajax(){ if(currentIndex>=20){ return; } var url = 'url'; console.log(i); $.ajax({ ty

Ajax长轮询

前台代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Wait.aspx.cs" Inherits="Web监听.Wait" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xht

ajax轮询与长轮询

  刚刚网了关于轮询的知识,必须拿到自己这里来做个备份了! 其实以前用ajax轮询做个及时数据更新的,只是当时做了不知道那个就是轮询. 首先我们什么时候会想到用轮询技术呢? 一般而言,最多的是及时信息更新,比如一个商城活动,参与人数的实时更新等,也还有人用来做过聊天室的,但是哈,轮询技术问题还是很多的,频繁的请求的服务器,服务器会把IP给你列入非白名单里,让你无法请求服务器.所以做及时的我还是建议用websocket 建立长连接. 其次小杨用一位老师的原话来讲解一下ajax轮询技术: 一.Aja

服务器推Comet长轮询的方式与普通AJAX不断请求的方式的区别

当我们想要在浏览器实时显示某些数据,如何实现? 实现的方式有多种,最简单的既是设置一个间隔,AJAX不断发送请求,这种方式最明显的缺陷不管有没有新数据都会一直发送请求,而且这个间隔如果设置的长,及时性太差,如果间隔设置的短,每个客户端都在不断发送大量请求,影响服务器性能 还有一种是利用服务器推的技术,基于长轮询的方式,如图所示: 一开始会觉得,这个也是在不断的请求服务器端,和普通AJAX不断请求有什么区别?这是还未了解长轮询的流程.深入研究了下,发现区别很大 长轮询大致流程为: 客户端通过AJA