在什么情况下会Ajax长/短轮询优先在HTML5 WebSocket的?

随着 Web 应用程序的复杂性日益增加,实时通信成为了一个必不可少的功能。而 Ajax 长/短轮询和 HTML5 WebSocket 是实现实时通信的两种主要方法。但是,在选择哪种方法时,需要考虑多种因素。

Ajax 长/短轮询

在介绍 Ajax 长/短轮询之前,我们先来了解一下 Ajax。Ajax(Asynchronous JavaScript and XML)是一种异步的网络请求技术,可以在不刷新页面的情况下向服务器发送请求并获取数据。

Ajax 长/短轮询是基于 Ajax 技术实现的,用于实现实时通信。长轮询指的是客户端向服务器发送一个请求,并保持连接处于打开状态,直到服务器有新的数据可返回时再返回给客户端;短轮询则是客户端定期向服务器发送请求以获取最新数据。

在某些情况下,Ajax 长/短轮询可能比 HTML5 WebSocket 更适合用于实时通信。以下是几个例子:

  1. 低流量的应用:如果您的应用程序的流量较低,则使用 Ajax 长/短轮询可能是更好的选择。这是因为 WebSocket 建立连接时需要消耗更多的资源,而且在连接保持打开期间会占用较多的内存。
  2. 服务器不支持 WebSocket:如果您使用的服务器不支持 WebSocket,则无法使用它来实现实时通信。在这种情况下,Ajax 长/短轮询是唯一的选择。
  3. 老旧浏览器支持:HTML5 WebSocket 不被一些旧版的浏览器所支持,例如 IE9 及以下版本。如果您需要支持这些老旧浏览器,则应该使用 Ajax 长/短轮询。

HTML5 WebSocket

HTML5 WebSocket 是一种基于 TCP 协议的全双工通信协议,它能够提供更快、更可靠的实时通信服务。与 Ajax 长/短轮询相比,HTML5 WebSocket 具有以下优点:

  1. 更快的响应速度:由于 WebSocket 使用了长连接,因此可以实现更快的响应速度,减少了每次请求的延迟时间。
  2. 更少的网络流量:由于 WebSocket 的连接只需要建立一次,因此可以减少网络流量和服务器负担。
  3. 更高效的性能:WebSocket 能够处理更多的并发连接,并且占用更少的资源。

但是,在某些情况下,使用 HTML5 WebSocket 可能不是最佳选择:

  1. 安全问题:WebSocket 技术可能存在安全隐患,并且需要特殊的配置才能确保安全性。
  2. 代理问题:如果您的应用程序运行在代理服务器后面,则 WebSocket 可能无法正常工作。这是因为一些代理服务器不支持 WebSocket 协议。
  3. 高流量的应用:如果您的应用程序的流量较高,则使用 WebSocket 可能会占用过多的服务器资源,从而影响应用程序的性能。

示例代码

Ajax 长轮询

-------- ------------- -
  --------
    ---- --------
    ----- ------
    -------- ------
    -------- -------------- -
      -- ----
      --------------
    --
    ------ ------------- ----------- ------------ -
      -- ----------- --- ---------- -
        --------------

- ---------------------------------------------------------- --------
-------------------------------------------------------------------------------------