长轮询、WebSocket、服务器发送事件 (SSE) 和 Comet 是什么?
长轮询、WebSocket、服务器发送事件 (SSE) 和 Comet 是客户端与服务器进行实时连接的一些方法。这些将在接下来的段落中讨论。
长轮询
这是一种技术,客户端向服务器请求信息,但不会立即期望响应。它涉及向服务器发送 HTTP 请求,然后保持连接打开,以便服务器稍后可以响应。服务器使用长轮询允许浏览器大约 6 个同时连接。
与其他方法相比,在这种情况下负载均衡很简单。长轮询是最传统的方法,并且所有 Web 浏览器都支持它。由于更新次数有限,它不支持重新连接。长轮询对服务器的资源消耗更大,但浏览器对其支持更普遍。
WebSocket
WebSocket 是一种计算机通信技术,允许我们通过单个 TCP 连接拥有全双工通信通道。
WebSocket 协议允许 Web 浏览器和 Web 服务器之间进行轻量级交互,允许从服务器到服务器以及从服务器到客户端的实时数据流。这是通过建立一种通用方法来实现的,服务器可以通过这种方法向客户端传输信息,而无需首先从客户端接收请求,然后在连接保持打开状态时启用消息来回传输。在这种方法中,客户端和服务器可以轻松地进行双向持续对话。
包括 Google Chrome、Opera、Edge、Firefox、Safari 等在内的浏览器广泛支持 WebSocket。WebSocket 是一种轻量级的浏览器扩展,允许最多 1024 个同时连接。它使用复杂的负载均衡和代理系统。它还允许检测丢失的客户端,这在之前的扩展轮询中是不可用的,尽管它不支持重新连接。
服务器发送事件 (SSE)
这是一种技术,允许浏览器通过 HTTP 连接自动接收来自任何服务器的更新。
WHATWG(Web 超文本应用程序技术工作组)提出了这个概念,Opera Web 浏览器在 2006 年率先采用它。这是一个规范,解释了服务器如何在建立客户端连接后启动与客户端的数据传输。它们使用称为 EventSource 的 JavaScript API 向客户端发送消息更新或持续更新,以改进跨浏览器流。
只有少数浏览器支持 SSE,包括 Mozilla、Chrome 和 Safari。Internet Explorer 和 Edge 仍然不支持此方法。它还允许浏览器最多进行六个同时连接。它允许简单的负载均衡和 EventSource 支持的重新连接管理。
Comet
这是一种 Web 应用程序范例,服务器使用长时间保持的 HTTPS 请求将数据推送到客户端服务器(即 Web 浏览器),而无需 Web 浏览器主动请求任何数据更新。Comet 也被称为各种其他名称,包括 Ajax 推送、反向 Ajax 等。Comet 背后的核心概念是执行单个正常的 HTTPS 请求并依赖于无限的响应。
Web 服务器接受新的传入请求并开始使用当前数据的新响应,但服务器不会关闭响应流,因此浏览器保持连接打开并等待更多数据。在每次更新结束时,服务器都会提供一个唯一的字符串。例如,“ThisCometMessageEnded”。
通过提供双向通信,Comet 消除了逐页 Web 范例和轮询的限制。