Skip to content

说说你对 Server-sent events(SSE,服务端推送) 的了解

Posted on:2024年8月15日 at 09:55

Server-Sent Events (SSE) 是一种基于 HTTP 的技术,用于实现服务器向客户端推送实时更新。与 WebSocket 不同,SSE 只支持从服务器到客户端的单向通信,并且是基于文本的事件流。

特点与工作原理

  1. 单向通信

    • SSE 允许服务器主动向客户端推送消息,但客户端不能直接通过 SSE 向服务器发送数据(虽然可以通过其他方法,如普通的 HTTP 请求)。
  2. 连接建立

    • 客户端通过向服务器发起 EventSource 请求来建立连接。服务器通过 HTTP 头 Content-Type: text/event-stream 声明响应内容类型,表明数据流是 SSE 格式。
    const eventSource = new EventSource("your-endpoint-url");
    
    eventSource.onmessage = function (event) {
      console.log("New message:", event.data);
    };
    
    eventSource.onerror = function (error) {
      console.error("Error:", error);
    };
    
  3. 事件格式

    • SSE 数据格式简单,每条消息以 data: 开头,字段之间用空行分隔。事件类型、重试时间等信息可以通过特定字段传递。
    data: Hello World
    data: This is another line of data
    
  4. 自动重连

    • 如果连接中断,浏览器会自动重连。服务器也可以通过 retry: 指令指定重连间隔。
    retry: 5000
    
  5. 事件类型

    • 可以指定事件类型,客户端通过 addEventListener 监听特定事件类型的消息。
    eventSource.addEventListener("custom-event", function (event) {
      console.log("Custom event:", event.data);
    });
    
  6. 兼容性

    • SSE 在大多数现代浏览器中得到支持,但不支持 IE 和一些较老的浏览器。需要检查浏览器兼容性,或考虑使用 Polyfill。

优点

缺点

原文转自:https://fe.ecool.fun/topic/5f0627e5-a8f1-471a-b988-60169bd11e12