前言
Web 推送是一种实时传输数据的技术,它能够无需刷新浏览器页面就可以实时地向页面发送数据。这种技术在很多场合中都被广泛应用,例如即时通讯、股票实时行情等。本文将介绍如何使用 SSE 技术实现 Web 推送,并提供详细的代码示例。
SSE 简介
SSE(Server-Sent Events)是一种基于 HTTP 协议的服务器向客户端推送数据的技术。它的原理是在服务器端建立一个长连接,向客户端推送数据,客户端在收到数据后通过 JavaScript 进行处理。
与其他 Web 推送技术不同,SSE 是单向通信的,即服务器向客户端发送数据,而客户端不能向服务器发送数据。因此,SSE 通常被用于服务器向客户端推送实时更新的数据。
SSE 实现的原理
SSE 是通过 HTTP 协议实现的。服务器端将数据封装在一个 HTTP 响应中,客户端通过一个 EventSource 对象打开一个 HTTP 连接,直到服务器端关闭连接,客户端就可以不间断地接收服务器端推送的数据。
下面是 SSE 的一个通讯流程:
- 客户端通过 EventSource 对象向服务器发送一个 HTTP 请求。
- 服务器返回一个 HTTP 响应,包含 "Content-Type: text/event-stream" 头部和无限期的 "Connection: keep-alive" 头部。
- 服务器将数据封装在 HTTP 响应中推送给客户端,数据格式为 "data: xxx",其中 xxx 为服务器端推送的数据。
- 客户端通过 onmessage 事件接收服务器端推送的数据,并进行处理。
SSE 实现示例
服务器端代码示例
首先我们需要编写一个服务器端代码,用于向客户端推送数据。这里我们以 Node.js 为例,代码如下:
const http = require('http'); http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive' }); setInterval(function () { const data = new Date().toLocaleTimeString(); res.write('data: ' + data + '\n\n'); }, 1000); }).listen(3000);
以上代码通过 http 模块创建了一个 HTTP 服务器,设置响应头部信息,它会在每隔 1 秒钟向客户端推送当前时间数据。
客户端代码示例
接下来我们需要编写客户端代码,用于接收服务器端推送的数据。这里我们以 HTML5 中的 EventSource 对象为例,代码如下:
const source = new EventSource('/stream'); source.onmessage = function (event) { const data = event.data; console.log(data); };
以上代码创建了一个 EventSource 对象,它会向服务器端发送一个 HTTP 请求,请求地址为 "/stream"。当服务器端推送数据时,这个对象就会触发 onmessage 事件,其中 event.data 表示服务器端推送的数据。
总结
本文介绍了 SSE 技术的原理和实现,并提供了详细的代码示例。通过学习本文,读者可以了解 SSE 技术的基本原理和使用方法,以及如何在 Web 开发中应用 SSE 技术实现实时数据推送功能。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a783b8add4f0e0ff0a6283