关于ajax的短轮询问题

利用前台的ajax不断向后台服务器请求,后台服务器不断查看数据库里的信息是否变化。若变化将信息返回前台,并执行一些操作

前台ajax代码 

注意要加上cache这一项,如果是post请求的化,可以免了。不然的化会一直从缓存中找数据,不能及时更新。

function ink(){
                 var a=$("#randnumber").val();
                $.ajax({
                type:"get",
                async:true,
                cache:false,
                url:"student.do",
                data: {method:"reg3",randnumber:a},
                success:function(msg){
                    try{
                         if(msg=="trues"){
                         window.location.href='success.jsp';
                         }
                     }catch(e){
                        alert('服务器繁忙!请稍后再试!');
                    }
                } 
                });   
                    
                
            }
            $(function(){setInterval("ink()",1000);});

后台代码

@RequestMapping(params="method=reg3")
    public @ResponseBody String reg3(int randnumber){
        if(dimensionService.isexist(randnumber)){
            return "trues";
        }else{
            return "falses";
        }
    }

后台是用spring MVC的

这里重点贴出一下dimensionService中caozuo

public Dimension getById( int id){
        final int randnumber=id;
        System.out.println("dimension dao ing");
        Session session=hibernateTemplate.getSessionFactory().openSession();
        session.setFlushMode(FlushMode.AUTO);
        Query q=session.createQuery("from Dimension where randnumber=?");
        q.setInteger(0,randnumber);
        Dimension dimension = (Dimension)q.uniqueResult();
        session.close(); 
        return dimension;
    }

这段代码是根据前台返回的randnumber进行返回数据库对应的dimension。

做的时候由于没有加session.close();这一句。出现了各种八阿哥,还好我及时参拜雍正。找出了。草,费煞人也。

短轮询来说太浪费了,请求的基本是无用的请求。大大损耗了性能。

这里最好是用长轮询来做,是推送模式。还在研究。

原文地址:https://www.cnblogs.com/ouzilin/p/5052584.html