服务器推送事件(Server-Sent Events)介绍

阅读时长 3 分钟读完

在网络应用程序中,即时通信和更新非常重要。我们需要一种方法,可以实时地从服务器获取更新,同时不需要反复执行轮询请求以占用带宽等资源。在这种情况下,服务器推送事件(server-sent events)成为了一种有趣、简单和可伸缩的解决方案。

什么是服务器推送事件?

服务器推送事件是指一种基于HTTP的实时通信技术,通过单向连接,服务器可以将实时事件推送到客户端。与WebSockets不同,它不需要建立双向连接。

服务器推送事件最初由HTML5规范定义。在实际应用中,您不需要使用完整的HTML5规范来实现服务器推送事件。只需使用现代浏览器提供的API即可轻松创建推送事件应用程序。

如何工作?

服务器推送事件是通过事件流发送。事件流是一个由事件组成的序列,网页在事件流上监听。在客户端浏览器与服务器之间建立连接时,服务器发送一个HTTP响应头,该响应头设置Content-Type为"text/event-stream",并指示不要关闭连接。这些设置在下面的示例代码中。

服务器向客户端发送事件时,使用"text/event-stream"格式的数据流。每个服务器推送事件都由一个id、一个类型和数据组成。下面是一个事件示例:

这个事件的类型是"update",数据是JSON格式。事件的ID是可选的,这使得客户端可以跟踪已接收的和未接收的事件。

在客户端,我们可以通过EventSource API连接到包含事件流的URL。当有新的事件推送到事件流时,客户端会自动接收并处理它。

在浏览器中使用

在现代浏览器中,可以使用EventSource JavaScript API来创建服务器推送事件客户端。下面是一个简单的客户端示例代码,演示如何在浏览器中使用服务器推送事件:

-- -------------------- ---- -------
----- ------ - --- -----------------------

--------------------------------- --------------- -
  ----- ---- - -----------------------
  ------------------ - - --------- - -- ---- - - ----------
---

-------------------------------- --------------- -
  ------------------- - - -------
---

在这个例子中,客户端通过连接到/events URL,来监听更新事件并将事件数据打印到控制台。如果发生错误,则触发事件错误处理程序。

总结

服务器推送事件是一种非常有用的技术,适用于需要实时和即时更新的应用程序。使用服务器推送事件,可以轻松地在浏览器中创建实时事件应用程序。这背后的基础是 HTTP 协议以及现代浏览器提供的事件源(EventSource)API。在设计 Web 应用程序时需要注意,服务器推送事件是一种有助于节省资源,提高 Web 应用程序性能的解决方案。

参考

  • HTML Living Standard, "Server-sent events"
  • MDN Web Docs, "Server-sent events"

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f1bc18f6b2d6eab3b93491

纠错
反馈