长轮询 Servlet实现

来源:互联网 发布:淘宝外卖点麻辣烫 编辑:程序博客网 时间:2024/04/30 18:05

长轮询

@RequestMapping("/ajax")public void ajax(long timed, HttpServletResponse response) throws Exception {     PrintWriter writer = response.getWriter();     Random rand = new Random();     // 死循环 查询有无数据变化     while (true) {         Thread.sleep(300); // 休眠300毫秒,模拟处理业务等         int i = rand.nextInt(100); // 产生一个0-100之间的随机数         if (i > 20 && i < 56) { // 如果随机数在20-56之间就视为有效数据,模拟数据发生变化             long responseTime = System.currentTimeMillis();             // 返回数据信息,请求时间、返回数据时间、耗时             writer.print("result: " + i + ", response time: " + responseTime + ", request time: " + timed + ", use time: " + (responseTime - timed));             break; // 跳出循环,返回数据         } else { // 模拟没有数据变化,将休眠 hold住连接             Thread.sleep(1300);         }     }}

另外注意:
长轮询和轮询是对于是否hold住连接等待来说的。
而长连接和短连接是对于tcp连接是否维持来说的。
两者不是同一概念。

0 0