AJAX長輪詢的方法來解決頻繁對后台的請求,進一步減小壓力
在實現過程發現AJAX的多次請求會出現多線程並發的問題又使用線程同步來解決該問題
個人對ajax長輪詢的一點愚見
ajax請示后台時,后台程序並沒有立即返回信息而是掛起,當符合條件時才會返回信息
從ajax定時請求變成輪詢模式:
function getRtmMsg(show){ $.ajax({ type:"POST", url:"rtmAction!getMsg.action", data:"show="+show, success: function(msg){ if(msg!=null){ bottomRight(); getRtmMsg("0"); } } }); }
后台代碼:
/** * 實時消息Action * @author wangwei * May 23, 2013 */ public class RtmAction extends ActionSupport{ HttpServletResponse response = ServletActionContext.getResponse(); HttpServletRequest request = ServletActionContext.getRequest(); private static final ThreadLocal threadLocal = new ThreadLocal(); private static Object lock = new Object(); public void getMsg(){ String show = request.getParameter("show"); if("0".equals(show)){ RtmTemplate.cjzxShow = false; } try { //多線程同步解決並發問題 synchronized(lock){ while(!RtmTemplate.cjzxShow){ System.out.println("檢測中。。。。"); Thread.sleep(5000); } } response.getWriter().println("1"); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }