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

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

相关文章
Server-Sent Events 和 WebSocket 之间有什么区别
Server-Sent Events (SSE) 和 WebSocket 分别代表单向和双向通信机制。SSE,基于 HTTP,仅允许服务器向客户端发送事件流;而 WebSocket 是双向实时通信协议,支持客户端与服务器的双向交互。SSE适合低实时性场景,依赖长轮询或流传输;WebSocket 提供更低延迟,适用于高实时性应用。两者在现代浏览器中普遍被支持,但旧版浏览器或特定网络环境可能影响兼容性。选择哪种机制取决于实际需求,如通信方向、实时性要求及目标浏览器支持。
|
4月前
|
移动开发 HTML5
详解 HTML5 服务器发送事件(Server-Sent Events)
详解 HTML5 服务器发送事件(Server-Sent Events)
86 0
|
5月前
|
监控 前端开发 网络协议
SSE(Server-Sent Events)请求与EventSource
SSE(Server-Sent Events)请求与EventSource
546 0
|
监控 前端开发
服务器发送事件(Server-Sent Events)
服务端向客户端推送消息,其实除了可以用WebSocket这种耳熟能详的机制外,还有一种服务器发送事件(Server-Sent Events),简称 SSE。这是一种服务器端到客户端(浏览器)的单向消息推送。
419 0
|
JavaScript 前端开发
http-server:一个JavaScript服务器
http-server:一个JavaScript服务器
67 0
http-server:一个JavaScript服务器
使用form上传文件到application server的另一种办法
使用form上传文件到application server的另一种办法
134 0
使用form上传文件到application server的另一种办法
|
JavaScript 前端开发
webpack-dev-server启动后,localhost:8080返回index.html的原理
webpack-dev-server启动后,localhost:8080返回index.html的原理
452 0
使用SAP connect发送HTML格式的邮件
使用SAP connect发送HTML格式的邮件
214 0
从 Server Timing Header 看服务器是如何处理请求的
如果你想了解服务器是如何处理请求的,Server-Timing header 或许能派上用场。 但是,你得注意别暴露敏感机密信息。
1118 0
|
Web App开发 机器学习/深度学习 移动开发

热门文章

最新文章

下一篇
无影云桌面