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