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

本文涉及的产品
视觉智能开放平台,图像资源包5000点
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,视频资源包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 应用程序能够轻松接收来自服务器的实时更新。通过简单的实现,开发人员可以为用户提供更加互动和动态的体验。

相关文章
|
3月前
Twaver-HTML5基础学习(30)监听事件_network绘制监听_network视图操作监听_鼠标事件的监听
本文介绍了如何在Twaver-HTML5中监听网络视图操作事件,包括视图绘制、鼠标事件以及获取鼠标下的网元等。
48 1
Twaver-HTML5基础学习(30)监听事件_network绘制监听_network视图操作监听_鼠标事件的监听
|
3月前
|
JavaScript 前端开发
JavaScript HTML DOM 事件
JavaScript HTML DOM 事件
28 5
|
3月前
|
存储 弹性计算 运维
自动化监控和响应ECS系统事件
阿里云提供的ECS系统事件用于记录云资源信息,如实例启停、到期通知等。为实现自动化运维,如故障处理与动态调度,可使用云助手插件`ecs-tool-event`。该插件定时获取并转化ECS事件为日志存储,便于监控与响应,无需额外开发,适用于大规模集群管理。详情及示例可见链接文档。
|
3月前
|
消息中间件 弹性计算 运维
阿里云ECS事件通知产品详解
介绍阿里云ECS事件通知产品的详情和使用案例,包括控制台、OpenAPI、调试等。
|
5月前
|
存储 JavaScript 前端开发
HTML中onblur事件的使用
HTML中onblur事件的使用
|
6月前
|
移动开发 HTML5
详解 HTML5 服务器发送事件(Server-Sent Events)
详解 HTML5 服务器发送事件(Server-Sent Events)
146 0
|
1天前
|
人工智能 JSON Linux
利用阿里云GPU加速服务器实现pdf转换为markdown格式
随着AI模型的发展,GPU需求日益增长,尤其是个人学习和研究。直接购置硬件成本高且更新快,建议选择阿里云等提供的GPU加速型服务器。
利用阿里云GPU加速服务器实现pdf转换为markdown格式
|
9天前
|
弹性计算 运维 安全
阿里云轻量应用服务器与ECS的区别及选择指南
轻量应用服务器和云服务器ECS(Elastic Compute Service)是两款颇受欢迎的产品。本文将对这两者进行详细的对比,帮助用户更好地理解它们之间的区别,并根据自身需求做出明智的选择。
|
10天前
|
SQL 弹性计算 安全
阿里云上云优选与飞天加速计划活动区别及购买云服务器后续必做功课参考
对于很多用户来说,购买云服务器通常都是通过阿里云当下的各种活动来购买,这就有必要了解这些活动的区别,同时由于活动内的云服务器购买之后还需要单独购买并挂载数据盘,还需要设置远程密码以及安全组等操作之后才能正常使用云服务器。本文就为大家介绍一下目前比较热门的上云优选与飞天加速计划两个活动的区别,以及通过活动来购买云服务器之后的一些必做功课,确保云服务器可以正常使用,以供参考。
|
12天前
|
弹性计算 安全 开发工具
灵码评测-阿里云提供的ECS python3 sdk做安全组管理
批量变更阿里云ECS安全组策略(批量变更)

热门文章

最新文章