zoukankan      html  css  js  c++  java
  • ajax长轮询 (转)

    javaWeb项目中需要一个实时提醒的功能,也就是某人做了某一操作,可以立即提醒到当前在线的用户

    最开始想在用户做了操作后,储存一个状态到数据库中然后用每隔几秒用ajax去请求后台查询数据库来确定是否显示提醒窗口

    提醒窗口使用jquery easyui 的messager 在右下角弹出如下图

    后查得可通过AJAX长轮询的方法来解决频繁对后台的请求,进一步减小压力

    在实现过程发现AJAX的多次请求会出现多线程并发的问题又使用线程同步来解决该问题

    个人对ajax长轮询的一点愚见

    ajax请示后台时,后台程序并没有立即返回信息而是挂起,当符合条件时才会返回信息

    文笔不好,只能白话出来,如有不对的地方还请各位指正,一起探讨学习!

    现贴出部分代码 

    js  ajax实现部分

    [javascript] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. function getRtmMsg(show){  
    2.         $.ajax({  
    3.            type:"POST",  
    4.            url:"rtmAction!getMsg.action",  
    5.            data:"show="+show,  
    6.            success: function(msg){  
    7.              if(msg!=null){  
    8.                 bottomRight();  
    9.                 getRtmMsg("0");  
    10.              }  
    11.            }  
    12.         });  
    13.     }  


    使用 jquery easyui的messager弹出提示窗口代码

    [javascript] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. function bottomRight(){    
    2.         $.messager.show({    
    3.             title:'提醒',    
    4.             msg:'下载考生',    
    5.             showType:'show'  
    6.         });   
    7.     }  



    后台Action

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
      1. /** 
      2.  * 实时消息Action 
      3.  * @author wangwei 
      4.  * May 23, 2013 
      5.  */  
      6. public class RtmAction  extends ActionSupport{  
      7.       
      8.     HttpServletResponse response = ServletActionContext.getResponse();  
      9.     HttpServletRequest request = ServletActionContext.getRequest();  
      10.       
      11.     private static final ThreadLocal threadLocal = new ThreadLocal();  
      12.     private static Object lock = new Object();  
      13.     public void getMsg(){  
      14.         String show = request.getParameter("show");  
      15.         if("0".equals(show)){  
      16.             RtmTemplate.cjzxShow = false;  
      17.         }  
      18.         try {  
      19.             //多线程同步解决并发问题  
      20.             synchronized(lock){  
      21.                 while(!RtmTemplate.cjzxShow){  
      22.                     System.out.println("检测中。。。。");  
      23.                     Thread.sleep(5000);  
      24.                 }  
      25.             }  
      26.             response.getWriter().println("1");  
      27.         } catch (IOException e) {  
      28.             e.printStackTrace();  
      29.         } catch (InterruptedException e) {  
      30.             e.printStackTrace();  
      31.         }  
      32.     }  
      33.       
  • 相关阅读:
    动态规划 01背包问题
    日常水题 蓝桥杯基础练习VIP-字符串对比
    本博客导航
    2019 ICPC 南昌 (C E G L)
    [模板]线段树
    [模板]手写双端队列(或普通队列)
    2019 ICPC Asia Yinchuan Regional (G, H)
    与超级源点与超级汇点相关的两题POJ 1062, HDU 4725
    [模板]链式向前星
    [总结]关于反向建图
  • 原文地址:https://www.cnblogs.com/bmaker/p/5782441.html
Copyright © 2011-2022 走看看