短轮询

74 阅读1分钟

1 介绍

短轮询的基本思路就是浏览器每隔一段时间向浏览器发送http请求,服务器端在收到请求后,不论是否有数据更新,都直接进行响应。这种方式实现的即时通信,本质上还是浏览器发送请求,服务器接受请求的一个过程,通过让客户端不断的进行请求,使得客户端能够模拟实时地收到服务器端的数据的变化。

2 优缺点

优点:比较简单,易于理解,实现起来也没有什么技术难点。 缺点:这种方式由于需要不断的建立http连接,严重浪费了服务器端和客户端的资源。尤其是在客户端,距离来说,如果有数量级想对比较大的人同时位于基于短轮询的应用中,那么每一个用户的客户端都会疯狂的向服务器端发送http请求,而且不会间断。人数越多,服务器端压力越大,这是很不合理的。

3 实现 (1)定义轮询方法

function renovate(t) {
           console.log("come in ")
           var sitv = setInterval(function () {

               var prog_url = '/renovate?t=' + t
               $.getJSON(prog_url, function (num_progress) {
                   if (num_progress === 0) {
                       console.log("正在讀取中")
                       $('.progress-bar').css('width', '20%');
                       $('.progress-bar').text('正在讀取中');
                   } else if (num_progress > 99) {
                       console.log("come in 99")
                       clearInterval(sitv);
                       $('.progress-bar').css('width', '99%');
                       $('.progress-bar').text('99%');
                   } else {
                       console.log('t:' + t + '  num_progress' + num_progress)
                       $('.progress-bar').css('width', num_progress + '%');
                       $('.progress-bar').text(num_progress + '%');
                   }
               });
           }, 1000);   // 每1000毫秒查询一次后台进度
       }

(2) 调用轮询

$(function () {
            bindBtnAddEvent();
        })


        function bindBtnAddEvent() {
            $('#save').click(function () {
                {#alert('開始')#}
                var t = $.now()
                renovate(t)
            });
        }

参考资料:blog.csdn.net/m0_69082030…