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