如何减轻ajax定时触发对服务器造成的压力和带宽的压力?ajax-长轮训

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();  
        }  
    }  
      
}  
复制代码

 

posted @   望星辰大海  阅读(1871)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示