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

简介: **服务器发送事件(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 应用程序能够轻松接收来自服务器的实时更新。通过简单的实现,开发人员可以为用户提供更加互动和动态的体验。

相关文章
|
移动开发 JavaScript 前端开发
精通服务器推送事件(SSE)与 Python 和 Go 实现实时数据流 🚀
服务器推送事件(SSE)是HTML5规范的一部分,允许服务器通过HTTP向客户端实时推送更新。相比WebSocket,SSE更轻量、简单,适合单向通信场景,如实时股票更新或聊天消息。它基于HTTP协议,使用`EventSource` API实现客户端监听,支持自动重连和事件追踪。虽然存在单向通信与连接数限制,但其高效性使其成为许多轻量级实时应用的理想选择。文中提供了Python和Go语言的服务器实现示例,以及HTML/JavaScript的客户端代码,帮助开发者快速集成SSE功能,提升用户体验。
Twaver-HTML5基础学习(30)监听事件_network绘制监听_network视图操作监听_鼠标事件的监听
本文介绍了如何在Twaver-HTML5中监听网络视图操作事件,包括视图绘制、鼠标事件以及获取鼠标下的网元等。
213 1
Twaver-HTML5基础学习(30)监听事件_network绘制监听_network视图操作监听_鼠标事件的监听
|
JavaScript 前端开发
JavaScript HTML DOM 事件
JavaScript HTML DOM 事件
182 6
|
消息中间件 弹性计算 运维
阿里云ECS事件通知产品详解
介绍阿里云ECS事件通知产品的详情和使用案例,包括控制台、OpenAPI、调试等。
|
存储 JavaScript 前端开发
HTML中onblur事件的使用
HTML中onblur事件的使用
|
移动开发 HTML5
详解 HTML5 服务器发送事件(Server-Sent Events)
详解 HTML5 服务器发送事件(Server-Sent Events)
799 0
|
9月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
771 10
|
9月前
|
弹性计算 ice
阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
848 8
|
9月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。

热门文章

最新文章