长轮询 & 短轮询

长轮询:客户端向服务器发送ajax请求,服务器接收到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。
优点:在无消息的情况下不会频繁请求,消耗资源小。
缺点:服务器hold住连接会消耗资源,返回的数据顺序无保证,难以管理维护。
function ajax(){
  var xhr = new XMLHttpRequest()
  xhr.open('GET','/zjy')
  xhr.onreadystatechange = () => {
    ajax()
  }
  xhr.send()
}
短轮询:就是普通的轮询,指定在特定的时间间隔(interval),由浏览器对服务器发出ajax请求,然后由服务器返回最新的数据给客户端浏览器。
优点:前后端逻辑代码简单易处理。
缺点:请求中大部分是无用的,难以维护,浪费服务器端资源,响应的结果没有顺序(因为是异步请求,当发送请求没有返回结果时,后面的请求又继续被发送)。
function ajax(time = 1000){
  let xhr = new XMLHttpRequest()
  setInterval(() => {
    xhr.open('GET','/zjy')
    xhr.onreadystatechange = () => {
      console.log('back new info')
    }
    xhr.send()
  },time)
}

减少使用setInterval

const doMyself = (interval) => {
    setTimeout(() => {
        console.log('zhenjianyu')
        doMyself()
    }, interval)
}

 

posted @ 2020-05-26 15:01  671_MrSix  阅读(257)  评论(0编辑  收藏  举报