java ajax长轮询
java ajax长轮询
大笨淡 发表于3年前
java ajax长轮询
  • 发表于 3年前
  • 阅读 80
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 写微信二维码扫描 实时刷新的使用用到了 就把我写的代码分享一下吧~

长轮询就是客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。        

前端代码:

$.ajax({

type: "post", //AJAX请求类型  

               url: "massGraphic/selectCode.do", //请求url  

               cache: false,  //无缓存  

               timeout: 1000 * 300,  //AJAX请求超时时间为30秒  

               data: { "time": 300, "scene_id": data.scene_id }, //参数time时间为最多等待(后台保持)时间(60秒无论是否有数据立即返回),单位为秒。userID判断诗句是否为新数据的标识  

               success: function (data) {  

                if(data==0){

                layer.alert("发送预览成功!",1);

                }else{

                layer.alert("300秒内没有扫描 自动关闭!");

                }

                $("#wx-num").hide();

                flag = true;

               }

});

后端代码:

@RequestMapping("selectCode")

public void selectCode(Integer time,Integer scene_id,HttpSession session,HttpServletResponse response) throws Exception{

User currentUser = (User) session.getAttribute("currentUser");

Code code  = new Code();

code.setUser_id(currentUser.getUser_id());

code.setScene_id(scene_id);

int json = 1;

Integer i=0;

while(true){

Thread.sleep(3000);//停留三千毫秒(3秒)  

             i++;  

             if(i<time)

             {

            json = massInfoService.selectCode(code);//当没有查询到这个值得时候就说明客户扫描二维码成功了 返回0

            if(json==0){

            break;

            }

             }

             else

             {

            break;

             }

}

ResponseUtil.write(response, json);

}


长轮询比普通轮询优点在于在无消息的情况下不会频繁的请求,耗费资源小。        

希望我写的对你有帮助~

共有 人打赏支持
粉丝 0
博文 4
码字总数 1241
×
大笨淡
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: