轮询

大约 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协议,能更好的节省服务器资源和带宽,并且能够更加实时的进行通讯。

上次编辑于: