轮询,长轮询

轮询

  • 轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。
  • 优点:后端程序编写比较容易。
  • 缺点:请求中有大半是无用,浪费带宽和服务器资源。
  • 实例:适于小型应用。

长轮询

  • 长轮询:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。
  • 优点:在无消息的情况下不会频繁的请求,耗费资源小。
  • 缺点:服务器hold连接会消耗资源,返回数据顺序无保证,难于管理维护。
  • 实例:WebQQ、Hi网页版、Facebook IM。
//web客户端代码如下:
function longPolling(){
$.ajax({
async : true,//异步
url : 'longPollingAction!getMessages.action',
type : 'post',
dataType : 'json',
data :{},
timeout : 30000,//超时时间设定30秒
error : function(xhr, textStatus, thrownError) {
longPolling();//发生异常错误后再次发起请求
},
success : function(response) {
message = response.data.message;
if(message!="timeout"){
broadcast();//收到消息后发布消息
}
longPolling();
}
});
} //web服务器端代码如下
public class LongPollingAction extends BaseAction {
private static final long serialVersionUID = 1L;
private LongPollingService longPollingService;
private static final long TIMEOUT = 20000;// 超时时间设置为20秒 public String getMessages() {
long requestTime = System.currentTimeMillis();
result.clear();
try {
String msg = null; while ((System.currentTimeMillis() - requestTime) < TIMEOUT) {
msg = longPollingService.getMessages();
if (msg != null) {
break; // 跳出循环,返回数据
} else {
Thread.sleep(1000);// 休眠1秒
}
}
if (msg == null) {
result.addData("message", "timeout");// 超时
} else {
result.addData("message", msg);
}
} catch (Exception e) {
e.printStackTrace();
} return SUCCESS;
} public LongPollingService getLongPollingService() {
return longPollingService;
} public void setLongPollingService(LongPollingService longPollingService) {
this.longPollingService = longPollingService;
} }

最新文章

  1. 搭建LNAMP环境(七)- PHP7源码安装Memcached和Memcache拓展
  2. 【耐克】【空军一号 Nike Air Force 1】【软木塞】
  3. [译]学习IPython进行交互式计算和数据可视化(一)
  4. luogg_java学习_04_数组
  5. JS实现屏蔽键盘操作
  6. ActiveMQ讯息传送机制以及ACK机制详解
  7. CodeSmith和PowerDesigner的使用安装和数据库创建
  8. HDU 5624 KK&#39;s Reconstruction 最小生成树
  9. HDU ACM 1078 FatMouse and Cheese 记忆化+DFS
  10. POJ3026(BFS + prim)
  11. Kylin系列之二:原理介绍
  12. google搜索引擎爬虫爬网站原理
  13. textarea右下角黑点
  14. 第十二节、尺度不变特征(SIFT)
  15. POJ 1375 Intervals 光源投影【平面几何】
  16. [hyperscan][pkg-config] hyperscan 从0到1路线图
  17. Docker安装和常用命令
  18. MySQL积累
  19. QSignalMapper类处理多信号关联同一个槽的方法(2)
  20. git 清空所有commit记录方法

热门文章

  1. HDU1172猜数字 [模拟]
  2. 004使用u-boot烧写裸版程序
  3. Okhttp解析—Okhttp概览
  4. 小小知识点(四十九)——SCMA
  5. mac使用python识别图形验证码
  6. javaScript类型和对象
  7. 《图解机器学习-杉山将著》读书笔记---CH5
  8. Go Web 编程之 请求
  9. Java 集合的工具类Collections的常用方法
  10. 从数组中取出n个不同的数组成子集 y 使 x = Σy