Skip to content

说说你对轮询的理解

参考答案:

什么是轮询?

轮询是指在一定的时间间隔内,定时向服务器发送请求,获取最新数据的过程。轮询通常用于从服务器获取实时更新的数据。

轮询和长轮询有什么区别?

轮询是在固定的时间间隔内向服务器发送请求,即使服务器没有数据更新也会继续发送请求。而长轮询是先发送一个请求,服务器如果没有数据更新,则不会立即返回,而是将请求挂起,直到有数据更新时再返回结果。

前端轮询的实现方式有哪些?

前端轮询的实现方式有两种:基于定时器的轮询和基于递归的轮询。基于定时器的轮询使用 setInterval() 方法来定时发送请求,而基于递归的轮询则使用 setTimeout() 方法来控制下一次请求的时间。

轮询有什么缺点?

轮询会产生大量的无效请求,浪费带宽和服务器资源,并且对服务器的压力比较大。同时,在短时间内频繁地发送请求可能会被服务器视为恶意行为,导致 IP 被封禁等问题。

如何避免轮询的缺点?

为了避免轮询的缺点,可以使用 WebSocket、SSE(Server-Sent Events)等技术来实现实时数据更新。

WebSocket 是一种双向通信协议,能够实现服务器与客户端之间的实时通信;而 SSE 则是一种基于 HTTP 的单向通信协议,可以实现服务器向客户端推送实时数据。

这些技术都能够减少无效请求,提高数据传输效率,并且对服务器资源的消耗也比较小。

题目要点:

轮询(Polling)

  • 定义:轮询是指客户端按固定时间间隔向服务器发送请求,以获取最新数据的过程,常用于实现实时数据更新。
  • 与长轮询的区别:普通轮询无论服务器是否有数据更新都定时发送请求;而长轮询在服务器无数据更新时挂起请求,直到有更新才返回响应。

前端轮询实现方式

  • 基于定时器:使用 setInterval() 方法按固定时间间隔发送请求。
  • 基于递归:使用 setTimeout() 方法在每次请求后设置下一次请求的时间,更加灵活。

轮询的缺点

  • 产生大量无效请求,浪费带宽和服务器资源。
  • 对服务器压力大,频繁请求可能被视为恶意行为,导致 IP 被封禁。

避免轮询缺点的方案

  • WebSocket:双向通信协议,实现服务器与客户端间的实时通信,减少无效请求,提高传输效率。
  • SSE(Server-Sent Events):基于HTTP的单向通信协议,允许服务器主动向客户端推送实时数据,同样能减少无效请求,减轻服务器压力。