jQuery和PHP实现Ajax长轮询的组合(LongPoll)

jQuery和PHP实现Ajax长轮询的组合(LongPoll)
HTTP是无状态的,单向的协议,而用户只能通过客服端向服务器发送请求并发送回一个响应从服务器处理。如果你想实现即时通讯应用,如聊天室、WEBQQ、在线服务和邮箱,服务器推送技术(彗星)将被使用。

传统的ajax轮询方法是在用户定义的时间间隔上查询服务器上的最新数据,拉数据的方式需要很短的时间间隔来保证数据的准确性,但时间间隔太短,客户服务端会在短时间内向服务器发送多个请求。

反向Ajax被称为长轮询或彗星,服务器和客户服务端需要维护一个长时间请求,它允许服务器在有数据时将消息返回给客户机。

XHTML

jQuery

Ajax请求data.php页用在这里得到价值的成功,和请求的时间为80秒,这80秒,如果成功不是返回服务器端,连接状态一直保持到数据返回值或成功接近0。下一个请求继续关闭连接后。
$(函数(){())
$(# BTN)。Bind(单击
$ ajax({
类型:邮政
DataType:JSON
URL
超时:80000,80秒的Ajax请求超时
数据:{80},在40秒之后,无论结果服务器返回数据
成功:功能(数据,textstatus){
获取服务器上的数据并显示数据查询
如果(数据=1){
$(#味精)。追加({资料}+数据。文本);
Evdata.data.btn.click();
}
没有从服务器获取查询数据
如果(数据=0){
$(#味精)。追加({没有数据} );
Evdata.data.btn.click();
}
},
ajax请求超时,继续查询
错误:函数(XMLHttpRequest,textstatus,errorthrown){
如果(textstatus = =超时){
$(#味精)。追加({暂停} );
Evdata.data.btn.click();
}
}
});
});
});

PHP

这里是一个无限循环,循环的结尾是返回结果返回到JSON数据。

接受_post美元{时间}参数限制超时时间周期,避免过度浪费资源。(浏览器关闭将不发送消息到服务器,使用可循环的时间)
如果(emptyempty($ _post {时间' }))出口();
set_time_limit(0); / /无限的请求超时
$ I = 0;
当(真){
睡眠(1);
Usleep(500000); / / 0.5秒
美元+;
如果数据是立即将数据返回给客户端,以及请求的结尾
兰特=兰德(1999);
如果($ < = 15){
$ ARR =阵列(''成功' = > 1
回声json_encode($ ARR);
出口();
}
/ /服务器($ _post {时间}×0.5)秒结束后告诉客户服务数据
如果(我= = $ _post {时间' }){
$ ARR =阵列(''成功' = > 0
回声json_encode($ ARR);
出口();
}
}

运行结果:在图中,您可以看到没有数据的请求时间是40多个,如果在40年代请求得到数据,请求就关闭了。

tag:组合长轮询电脑软件phpjquery

相关内容