HTML5最终章笔记来啦~ 本篇主要整理的是HTML5中新增的一些服务器和客户端之间的通信方案。
先来说说传统AJAX 轮询方案的缺点: 浏览器需要不断的向服务器发出请求,然而 HTTP 请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的网络带宽资源。
HTML5 SSE
HTML5 Server-Sent Events(SSE)是一种基于EventSource对象,用于实现服务器向客户端推送数据的技术,它允许服务器向客户端发送事件流(Event Stream),并在客户端自动更新。HTML5 SSE 技术的核心是 EventSource 对象,它是 HTML5 API 中的一部分,用于创建服务器发送事件流的连接。
SSE 技术提供了一种简单且可靠的方法,使得开发人员可以实现实时通信和数据推送,而无需使用 WebSockets 或其他复杂的技术。并且,与传统的使用轮询来不断获取更新相比,HTML5 SSE 具有更低的延迟和更高的可扩展性,因为它使用单个长连接来保持数据流。
HTML5 SSE 技术只能用于支持
EventSource对象的现代浏览器。服务器端也需要支持 SSE 协议
HTML5 WebSockets
HTML5 WebSockets是建立在单个 TCP 连接上进行全双工通讯的协议。浏览器和服务器只需要完成一次握手,就能建立一个持久的、双向的通信通道,使得浏览器和服务器之间可以实时地进行双向数据传输,而无需像传统的 HTTP 请求那样每次都建立和关闭连接。
其他可选方案及对比
| 方案 | 说明 |
|---|---|
| HTML5 Server-Sent Events(SSE) | HTML5 Server-Sent Events(SSE)是一种基于EventSource对象,用于实现服务器向客户端推送数据的技术,它允许服务器向客户端发送事件流(Event Stream),并在客户端自动更新。*使用单个长连接来保持数据流,因此具有更低的延迟和更高的可扩展性。 |
| WebSockets | WebSockets 是一种全双工通信协议,可以在客户端和服务器之间实现实时通信。WebSocket API 提供了一组用于建立和管理 WebSocket 连接的方法和事件处理程序。* WebSockets 提供了最好的实时通信体验,但需要服务器端的支持。 |
| Long Polling 长轮询 | 长轮询(Long Polling)是一种服务器推送技术,它通过客户端不断向服务器发送HTTP请求来模拟实时通信。服务器在接收到客户端请求后,不会立即响应,而是等待有新的数据时再返回响应。客户端接收到响应后,再立即发送新的请求,以保持连接。*可在 任何网络环境下使用,但会占用更多的服务器资源,并且可能会导致延迟和连接超时问题。 |
| Comet | Comet 是一种通过 HTTP 长连接实现实时通信的技术。它可以使用 XHR(XMLHttpRequest)对象或 <iframe> 元素来保持连接,并通过服务器推送数据来实现实时通信。*可在 任何网络环境下使用,但会占用更多的服务器资源,并且可能会导致延迟和连接超时问题。 |