轮询
大约 1 分钟
轮询
为了实现客户端实时获取到服务端的最新信息,我们可以使用轮询这一方法。简单理解就是客户端持续主动给服务端发送请求,以获取最新数据。
常见的轮询方式分为短轮询和长轮询,区别就是:
- 短轮询是每隔一段时间就发送一次请求
- 长轮询就是没有间隔时间,每次客户端得到服务端返回的信息后就立马发送新的请求
轮询实现代码
const polling = (key) => {
return new Promise((resolve, reject) => {
sign(key).then((res) => {
if (res.code = 0) {
// 登录失败
reject('登录失败')
} else if (res.code = 1) {
// 登录成功
resolve(res)
} else {
// 未得到登录失败或成功的消息
setTimeout(() => {
resolve(polling(key))
}, 500)
}
})
})
}
注
上面的代码是一个短轮询,当我们没有得到具体的登录成功或失败的信息时,每隔 500ms 就向服务器发送请求获取信息。
轮询的缺点
轮询的模式有很明显的缺点:客户端需要不断的往服务器发送请求,然而http
请求与响应可能会包含较长的头部,其中真正有用的信息只有很小的一部分,其他无用的数据都是在浪费带宽资源。
为了解决这一问题,HTML5
定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更加实时的进行通讯。