<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Server-Sent Event on 进击的页面仔</title>
    <link>https://genffy.com/tags/server-sent-event/</link>
    <description>Recent content in Server-Sent Event on 进击的页面仔</description>
    <generator>Hugo -- 0.147.0</generator>
    <language>zh</language>
    <copyright>2026 进击的页面仔</copyright>
    <lastBuildDate>Mon, 13 Mar 2023 10:13:45 +0800</lastBuildDate>
    <atom:link href="https://genffy.com/tags/server-sent-event/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>SSE What Why How</title>
      <link>https://genffy.com/posts/sse-what-why-how/</link>
      <pubDate>Mon, 13 Mar 2023 10:13:45 +0800</pubDate>
      <guid>https://genffy.com/posts/sse-what-why-how/</guid>
      <description>&lt;h2 id=&#34;server-sent-event-是什么&#34;&gt;Server-Sent Event 是什么&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Server-Sent Event (SSE)&lt;/code&gt; 是一种用于在 Web 应用程序中向客户端发送实时事件的技术，它允许服务器向客户端推送数据，而无需客户端不断地轮询服务器。&lt;/p&gt;
&lt;h3 id=&#34;为了解决什么问题&#34;&gt;为了解决什么问题&lt;/h3&gt;
&lt;p&gt;SSE 是为了解决传统的轮询技术所面临的问题而引入的。在传统的轮询中，客户端不断地向服务器发送请求以检查数据是否可用。这种方式会占用大量带宽和服务器资源，同时也会导致响应延迟。SSE 则完全颠覆了这种方式，客户端只需要向服务器发送一个请求并保持长连接，服务器在有数据更新时即可通过这个连接向客户端推送数据。这种方式减少了不必要的请求和响应，从而提高了性能和效率。SSE 通常用于实时数据更新、通知和聊天应用程序等场景。 &amp;ndash; from @chatGPT&lt;/p&gt;
&lt;h2 id=&#34;数据流规范以及注意事项&#34;&gt;数据流规范以及注意事项&lt;/h2&gt;
&lt;h3 id=&#34;数据流规范如下&#34;&gt;数据流规范如下&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;数据流以 &lt;code&gt;data:&lt;/code&gt; 开头，表示接下来是数据内容。&lt;/li&gt;
&lt;li&gt;数据内容可以是任意文本格式的数据，通常是 &lt;code&gt;JSON&lt;/code&gt; 或纯文本。&lt;/li&gt;
&lt;li&gt;数据内容必须以 &lt;code&gt;\n\n&lt;/code&gt; 结尾，表示这是一个完整的数据块。&lt;/li&gt;
&lt;li&gt;可以包含一个或多个事件标识符 &lt;code&gt;(event ID)&lt;/code&gt;，以 &lt;code&gt;event:&lt;/code&gt; 开头。事件标识符可以用于标识服务器发送的数据类型。&lt;/li&gt;
&lt;li&gt;可以包含一个或多个注释，以 : 开头。&lt;/li&gt;
&lt;li&gt;可以包含一个可选的重试时间 &lt;code&gt;(retry time)&lt;/code&gt;，以 &lt;code&gt;retry:&lt;/code&gt; 开头，表示客户端在连接断开后应该等待多长时间后重试连接。重试时间必须是以毫秒为单位的整数。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;ndash; from @chatGPT&lt;/p&gt;
&lt;h3 id=&#34;注意事项&#34;&gt;注意事项&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;当不使用 &lt;code&gt;HTTP/2&lt;/code&gt; 时，SSE 存在打开连接数的限制，这个限制对于打开多个选项卡的情况尤其痛苦，因为每个浏览器都有一个非常低的限制数量 (6)。在 Chrome 和 Firefox 中，这个问题被标记为 “不会修复”。这个限制是针对每个浏览器 + 域名的，这意味着您可以在所有选项卡中打开 6 个 SSE 连接到 &lt;a href=&#34;https://www.example1.com&#34;&gt;www.example1.com&lt;/a&gt;，以及另外 6 个 SSE 连接到 &lt;a href=&#34;https://www.example2.com&#34;&gt;www.example2.com&lt;/a&gt;（&lt;a href=&#34;https://stackoverflow.com/questions/5195452/websockets-vs-server-sent-events-eventsource/5326159&#34;&gt;根据 Stackoverflow 的说法&lt;/a&gt;）。在使用 HTTP/2 时，最大并发 HTTP 流的数量是服务器和客户端协商的（默认为 100）。 &amp;ndash; from &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#sect1&#34;&gt;MDN&lt;/a&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
