📜  什么是长轮询、Websocket、服务器发送事件 (SSE) 和 Comet?

📅  最后修改于: 2022-05-13 01:57:01.675000             🧑  作者: Mango

什么是长轮询、Websocket、服务器发送事件 (SSE) 和 Comet?

客户端与服务器端的实时交互有多种方式,即长轮询、Websockets、服务器发送事件(SSE)和Comet。这些解释如下。

1. 长轮询:
它是一种技术,客户端从服务器请求信息而不期望立即响应,或者基本上涉及向服务器发出 HTTP 请求,然后保持连接打开以允许服务器稍后响应。使用长轮询服务器允许来自浏览器的大约 6 个并行连接。

与其他方式相比,这种方式的负载平衡很容易。长轮询是最古老的方式,因此所有 Web 浏览器都支持。尽管由于此更新较少,它不提供重新连接处理。长轮询在服务器上更加密集或繁重,但更广泛地被浏览器接受。

2.网络套接字:
WebSocket 是一种计算机通信协议,它使我们能够通过单个传输控制协议 (TCP) 连接实现全双工通信通道。 WebSocket 协议支持 Web 浏览器和 Web 服务器之间的交互,具有较低的权重开销,提供与服务器之间的实时数据传输。这是通过定义服务器向客户端发送信息的标准方式来完成的,而无需先由客户端请求,然后允许在保持连接打开的同时来回传递消息。通过这种方式,可以在客户端和服务器之间进行双向推进对话,而不会出现任何问题。

Websockets 主要在 google chrome、opera、edge、firefox、safari 等 Web 浏览器中被接受。WebSockets 在浏览器上很轻,它提供来自浏览器的多达 1024 个并行连接。它具有复杂的负载平衡和代理技术。它还支持在长轮询中不存在的丢弃客户端检测,但它也不提供重新连接处理。

3. 服务器发送事件(SSE):
它是一种使浏览器能够使用 HTTP 连接从任何服务器接收自动更新的技术。该技术由 WHATWG(Web 超文本应用技术工作组)提出,并于 2006 年由 Opera 网络浏览器首次实现。它是一个标准,描述了服务器在设置初始客户端连接后如何初始化与客户端的数据传输向上。他们通过称为 EventSource 的 javascript API 向客户端发送消息更新或持续更新,以增加跨浏览器流式传输。

一些浏览器(例如 Mozilla、Chrome 和 Safari)支持 SSE。 Internet Explorer 和 Edge 仍然不支持这种技术。它还支持来自浏览器的多达 6 个并行连接。它支持简单的负载平衡,还提供 EventSource 支持的重新连接处理。

4.彗星:
它是一种 Web 应用程序模型,其中长期持有的 HTTPS 请求允许服务器将数据推送到客户端服务器,即 Web 浏览器,而 Web 浏览器无需明确请求任何数据更新。 Comet 以许多其他名称而闻名,例如 Ajax Push、Reverse Ajax 等。开发 Comet 背后的基本思想是发出一个单一且常规的 HTTPS 请求,并依赖于来自服务器的永无止境的响应。

Web 服务器接受新的传入请求并使用当前数据开始新的响应,但服务器不会结束响应,因此浏览器保持连接打开并等待新数据,每当新数据到达时,服务器会将其写入响应流。服务器在特定更新结束时发送一个唯一字符串。例如。 “ThisCometMessageEnded”。
Comet 通过提供双向通信来结束逐页 Web 模型和轮询的限制。

实现 Comet 的具体方法分为两大类:流式传输和长轮询。

  • 一、流媒体——
    任何使用流式 Comet 的应用程序都会为所有 Comet 事件打开从客户端浏览器到服务器的单个恒定连接。流式传输彗星的技术是-
    (a) Hidden iframe
    (b) XMLHttpRequest 
  • 二、长轮询 –
    实现长轮询的具体技术包括:
    (a) XMLHttpRequest long polling
    (b) Script tag long polling