轮询和长轮询

请教下,轮询和长轮询
最新回答
痘肤西施

2026-10-22 17:12:03

轮询是客户端定时向服务端发起请求以获取数据更新,长轮询是客户端发起请求后服务端挂起连接直到有数据更新再返回;长连接是通过特定方式维持客户端与服务端的持久连接以实现数据实时传输。 以下是详细介绍:

轮询
  • 定义与原理:客户端按照预先设定的时间间隔,定时向服务端发送请求,主动询问是否有新的数据更新。服务端在接收到请求后,立即将当前的数据状态返回给客户端,无论是否有新数据产生。
  • 优缺点

    优点:后端程序编写相对容易,实现逻辑较为简单直接。

    缺点

    大量耗费服务器内存和宽带资源。由于客户端不停地请求服务器,而在很多情况下并没有新的数据更新,这就导致绝大部分请求都是无效请求,造成了资源的浪费。

    数据不一定能实时更新。数据的更新取决于设定的请求间隔时间,基本会有一定的延迟,无法及时获取最新的数据。

  • 实例:适用于一些小型应用,这些应用对数据的实时性要求不高,且服务器资源相对充足,能够承受频繁请求带来的压力。
长轮询
  • 定义与原理:客户端向服务端发送请求后,服务端并不会立即返回响应,而是将连接挂起,直到有新的内容更新时,才将更新后的内容返回给客户端。从流程上看,这种模式可以理解为服务器向客户端推送内容。
  • 优缺点

    优点

    解决了轮询中数据更新不及时和大量无效请求的问题,能够实现数据的相对实时更新。

    在无消息的情况下不会频繁地发起请求,相比轮询耗费资源更小。

    缺点

    服务器在挂起连接的过程中比较耗内存,因为需要维护这些未返回响应的连接。

    返回数据的顺序无保证,难于管理维护。由于多个客户端的请求可能在不同时间到达,且服务端返回数据的时机也不确定,可能导致数据顺序混乱。

  • 实例:WebQQ、Hi网页版、Facebook IM等。这些应用需要及时获取用户之间的消息和互动信息,长轮询可以在保证数据相对实时性的同时,减少不必要的请求,提高资源利用率。
长连接
  • 定义与原理:在页面里嵌入一个隐藏的iframe,将这个隐藏iframe的src属性设为对一个长连接的请求,或是采用xhr请求。通过这种方式,服务器端能够源源不断地往客户端输入数据,保持客户端与服务端之间的持久连接。
  • 优缺点

    优点

    消息能够即时到达客户端,不会发送无用的请求。只有在有新数据时才会进行传输,提高了数据传输的效率。

    管理起来相对方便,相比于长轮询,在数据顺序和连接管理上有一定的优势。

    缺点:服务器维护一个长连接会增加开销,需要消耗更多的服务器资源来保持连接的稳定和数据的传输。

  • 实例:Gmail聊天。Gmail聊天需要实时显示用户之间的对话内容,长连接可以确保消息的即时传递,提供良好的用户体验。
其他相关技术
  • Flash Socket

    定义与原理:在页面中内嵌入一个使用了Socket类的Flash程序,JavaScript通过调用此Flash程序提供的Socket接口与服务器端的Socket接口进行通信。JavaScript在收到服务器端传送的信息后控制页面的显示。

    优缺点

    优点:能够实现真正的即时通信,而不是伪即时,通信的实时性非常高。

    缺点

    客户端必须安装Flash插件,这限制了其在一些设备和浏览器上的使用。

    采用非HTTP协议,无法自动穿越防火墙,可能会在一些网络环境下受到限制。

    实例:网络互动游戏。网络互动游戏对实时性要求极高,Flash Socket可以满足游戏玩家之间实时互动的需求。