1. 程式人生 > >長輪詢 Servlet實現

長輪詢 Servlet實現

長輪詢

@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連線是否維持來說的。
兩者不是同一概念。