HTML5 服务器发送事件(Server-Sent Events)详解

本文涉及的产品
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,视频资源包5000点
视觉智能开放平台,图像资源包5000点
简介: **服务器发送事件(Server-Sent Events, SSE)** 是一种用于构建单向实时通信的技术,允许服务器主动向客户端(通常是浏览器)推送更新。SSE 提供了一个简单的 API,非常适合实时应用,如新闻更新、天气变化、社交媒体通知等。SSE 基于 HTTP 协议,通过长连接实现数据传输。其主要优点包括简洁的 API、持久连接和自动重连功能。大多数现代浏览器都内置了对 SSE 的支持。通过简单的服务器端和客户端代码,可以轻松实现数据的实时推送和接收。

服务器发送事件(Server-Sent Events, SSE) 是一种用于构建单向实时通信的技术,允许服务器主动向客户端(通常是浏览器)推送更新。SSE 提供了一个简单的 API,使得处理实时数据变得更直观,非常适合实时应用,如新闻更新、天气变化、社交媒体通知等。

1. SSE 的工作原理

SSE 基于 HTTP 协议,客户端通过一个长连接与服务器建立通信。当服务器有数据更新时,它会将消息发送到客户端。这种推送技术与 WebSocket 相似,但 SSE 是单向的——即数据仅从服务器到客户端。

2. SSE 的优点

  • 简洁的 API:使用简单的 JavaScript API,无需引入其他库。
  • 持久连接:一旦连接建立,客户端和服务器之间的连接将保持打开状态,可以随时接收消息。
  • 自动重连:如果连接中断,浏览器会自动尝试重连。
  • 原生支持:大多数现代浏览器都内置支持 SSE。

3. 创建和使用 SSE

3.1. 服务器端代码示例

首先,需要设置一个服务器端接口来发送 SSE。以下是一个使用 Node.js 的示例:

const http = require('http');

http.createServer((req, res) => {
   
    // 设置响应头
    res.writeHead(200, {
   
        'Content-Type': 'text/event-stream', // 设定内容类型
        'Cache-Control': 'no-cache', // 禁止缓存
        'Connection': 'keep-alive' // 保持连接
    });

    // 发送事件
    setInterval(() => {
   
        const currentTime = new Date().toLocaleTimeString();
        res.write(`data: The current time is: ${
     currentTime}\n\n`);
    }, 1000); // 每秒更新一次

}).listen(3000, () => {
   
    console.log('Server running on http://localhost:3000');
});

3.2. 客户端代码示例

在客户端,使用 EventSource 接口来接收来自服务器的事件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>SSE Example</title>
</head>
<body>
    <h1>SSE Demo</h1>
    <div id="time"></div>

    <script>
        const eventSource = new EventSource('http://localhost:3000');

        eventSource.onmessage = function(event) {
    
            document.getElementById('time').innerText = event.data; // 更新界面
        };

        eventSource.onerror = function(err) {
    
            console.error("EventSource failed: ", err);
        };
    </script>
</body>
</html>

4. 事件格式

SSE 消息格式如下:

data: 你的消息内容
data: 更多消息内容
event: 事件类型
id: 事件 ID
retry: 重新连接时间
  • data:要发送的消息,可能有多行,每行以换行符开头。
  • event:自定义事件类型(可选)。
  • id:用于跟踪事件的 ID(可选)。
  • retry:客户端在连接断开后尝试重连的时间(以毫秒为单位)。

5. 注意事项

  • 兼容性:大多数现代浏览器支持 SSE,但 Internet Explorer 不支持。可以通过 navigator 对象检查浏览器支持情况。
  • 限制:SSE 是单向的,只能从服务器到客户端。若需要双向通信,可以考虑 WebSocket。
  • 跨域请求:对于跨域请求,需要正确配置 CORS 头。
  • 性能考虑:长连接和频繁的数据推送可能会对服务器性能产生影响,需要合理管理。

总结

服务器发送事件(SSE)是一种轻量级、简洁的实时通信解决方案,使得 web 应用程序能够轻松接收来自服务器的实时更新。通过简单的实现,开发人员可以为用户提供更加互动和动态的体验。

相关文章
|
2月前
Twaver-HTML5基础学习(30)监听事件_network绘制监听_network视图操作监听_鼠标事件的监听
本文介绍了如何在Twaver-HTML5中监听网络视图操作事件,包括视图绘制、鼠标事件以及获取鼠标下的网元等。
40 1
Twaver-HTML5基础学习(30)监听事件_network绘制监听_network视图操作监听_鼠标事件的监听
|
2月前
|
JavaScript 前端开发
JavaScript HTML DOM 事件
JavaScript HTML DOM 事件
23 5
|
2月前
|
存储 弹性计算 运维
自动化监控和响应ECS系统事件
阿里云提供的ECS系统事件用于记录云资源信息,如实例启停、到期通知等。为实现自动化运维,如故障处理与动态调度,可使用云助手插件`ecs-tool-event`。该插件定时获取并转化ECS事件为日志存储,便于监控与响应,无需额外开发,适用于大规模集群管理。详情及示例可见链接文档。
|
2月前
|
消息中间件 弹性计算 运维
阿里云ECS事件通知产品详解
介绍阿里云ECS事件通知产品的详情和使用案例,包括控制台、OpenAPI、调试等。
|
4月前
|
存储 JavaScript 前端开发
HTML中onblur事件的使用
HTML中onblur事件的使用
|
5月前
|
移动开发 HTML5
详解 HTML5 服务器发送事件(Server-Sent Events)
详解 HTML5 服务器发送事件(Server-Sent Events)
120 0
|
13天前
|
移动开发 前端开发 JavaScript
[HTML、CSS]细节与使用经验
本文总结了前端开发中的一些重要细节和技巧,包括CSS选择器、定位、层级、全局属性、滚轮控制、轮播等。作者以纯文字形式记录,便于读者使用<kbd>Ctrl + F</kbd>快速查找相关内容。文章还提供了示例代码,帮助读者更好地理解和应用这些知识点。
36 1
[HTML、CSS]细节与使用经验
|
15天前
|
移动开发 前端开发 JavaScript
[HTML、CSS]知识点
本文涵盖前端知识点扩展、HTML标签(如video、input、canvas)、datalist和details标签的使用方法,以及CSS布局技巧(如margin、overflow: hidden和动态height)。文章旨在分享作者的学习经验和实用技巧。
28 1
[HTML、CSS]知识点

热门文章

最新文章