上一篇: HTML5 Web Workers
下一篇: HTML5 WebSocket
HTML5 SSE
创建服务端事件源
首先,我们需要创建一个服务端事件源。在本示例中,我们假设您正在使用 Node.js 和 Express 框架。首先安装 express
:
npm install express
然后,创建一个名为 server.js
的文件,并添加以下内容以设置 SSE 事件源:
const express = require("express"); const app = express(); app.get("/events", (req, res) => { res.setHeader("Content-Type", "text/event-stream"); res.setHeader("Cache-Control", "no-cache"); res.setHeader("Connection", "keep-alive"); setInterval(() => { const message = `data: ${new Date().toLocaleTimeString()}\n\n`; res.write(message); }, 1000); }); app.listen(3000, () => { console.log("Listening on port 3000..."); });
在这个示例中,我们创建了一个 /events
路径用作 SSE 事件源。我们定义了适当的响应头,并使用 setInterval()
每秒发送当前时间。
创建客户端
接下来,创建一个 HTML 页面并使用 JavaScript 连接到服务端事件源。在这个示例中,我们将创建一个名为 index.html
的文件,并在其中添加以下内容:
<!DOCTYPE html> <html> <head> <script> document.addEventListener("DOMContentLoaded", function () { const eventSource = new EventSource("/events"); eventSource.onmessage = function (event) { const timeDisplay = document.getElementById("time"); timeDisplay.textContent = event.data; }; }); </script> </head> <body> <h1>Server Time: <span id="time"></span></h1> </body> </html>
在这个示例中,我们首先创建了一个名为 time
的 HTML 元素,用于显示服务器发送的时间数据。接下来,在 JavaScript 中,我们创建了一个新的
EventSource
对象并连接到 /events
路径。当收到服务器端消息时,我们更新 time
元素的文本内容。
运行示例
现在,我们已经创建了服务端和客户端代码,可以运行这个示例了。首先,在命令行中启动服务器:
node server.js
您将看到输出 "Listening on port 3000...",表示服务器已成功启动。
接下来,在浏览器中打开 index.html
文件。您应该会看到一个标题,其中包含从服务器每秒更新的当前时间。
总结
通过本教程,您已经学会了如何使用 HTML5 的 SSE 功能实现服务器端向客户端的单向通信。这种技术相较于 WebSocket 更简单,但同时也具有一定的局限性,例如它们只支持文本数据,不支持二进制数据。此外,SSE只能实现单向通信,如果需要实现双向通信,则需考虑其他技术,如 WebSocket。尽管如此,对于许多场景而言,SSE 仍然是一种非常实用且易于实现的解决方案。