什么是 SSE
SSE(Server-Sent Events)是一种 HTML5 技术,可以让服务器实时向客户端推送数据,而无需客户端发起请求。SSE 基于 HTTP 协议,使用标准的 HTTP 连接,但是服务器可以在任何时候向客户端发送数据,而不用等待客户端的请求。这使得 SSE 技术非常适合实现即时通讯、实时数据推送等功能。
SSE 技术的优点
与传统的 AJAX 请求相比,SSE 技术有以下优点:
- 实时性更高:SSE 技术可以实现服务器向客户端实时推送数据,而不需要客户端不断地发送请求。
- 更少的网络流量:SSE 技术只需要建立一次连接,就可以实现服务器向客户端推送数据,而不需要客户端不断地发送请求。这可以减少网络流量,降低服务器负载。
- 更简单的代码:使用 SSE 技术可以减少客户端的代码量,因为客户端不需要实现轮询或长轮询等复杂的请求方式。
SSE 技术的实现步骤
实现 SSE 技术的步骤如下:
- 在服务器端,需要使用 EventSource 对象来实现 SSE 技术。EventSource 是一个 JavaScript 对象,用于接收服务器发送的事件流。
- 在客户端,需要使用 EventSource 对象来接收服务器推送的事件流。客户端可以通过 addEventListener 方法来监听服务器推送的事件。
- 在服务器端,需要使用特定的格式来发送事件流。事件流的格式如下:
event: <event-name> data: <data> event: <event-name> data: <data> ...
其中,event 行表示事件的名称,data 行表示事件的数据。每个事件必须以两个换行符结尾。
SSE 技术的示例代码
以下是一个使用 SSE 技术实现即时股票行情推送的示例代码:
服务器端代码
// javascriptcn.com 代码示例 const http = require('http'); const server = http.createServer((req, res) => { // 设置响应头 res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive' }); // 发送事件流 setInterval(() => { const data = Math.random() * 1000; res.write(`event: stock\n`); res.write(`data: ${data}\n\n`); }, 1000); }); server.listen(3000);
客户端代码
const source = new EventSource('/stock'); source.addEventListener('stock', (event) => { const data = JSON.parse(event.data); console.log(`股票行情:${data}`); });
总结
SSE 技术可以实现服务器向客户端实时推送数据,适用于实时通讯、实时数据推送等场景。使用 SSE 技术可以提高实时性、减少网络流量、简化代码。在实现 SSE 技术时,需要在服务器端使用 EventSource 对象来发送事件流,在客户端使用 EventSource 对象来接收事件流。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6509812095b1f8cacd437b6b