最全面的 Server-sent Events 教程

什么是 Server-sent Events?

Server-sent Events(SSE)是一种 HTML5 技术,允许服务器向客户端发送事件流。使用 SSE,服务器可以向客户端发送任意数量的数据,而无需客户端请求。这种技术特别适合实时应用程序,例如聊天应用程序或股票市场应用程序。

SSE 是与 WebSocket 相似的技术,但有一些重要的区别。WebSocket 提供了双向通信,而 SSE 只提供单向通信。此外,WebSocket 可以发送任何类型的数据,而 SSE 只能发送文本数据。

如何使用 Server-sent Events?

使用 SSE 非常简单,只需创建一个事件流并将其连接到服务器即可。以下是一个基本的示例:

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

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

在这个示例中,我们创建了一个事件流,并将其连接到名为 "/events" 的服务器端点。每当服务器发送一个事件时,我们将在页面上显示接收到的数据。

下面是一个简单的 Node.js 服务器,它将发送事件流:

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

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

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

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

在这个示例中,我们创建了一个 HTTP 服务器,并在 /events 端点上设置了 SSE 标头。然后,我们每秒发送一个事件,其中包含当前的时间。

高级用法

SSE 还有一些高级用法,可以更好地控制事件流的行为。以下是一些示例:

重试

如果服务器在发送事件时遇到错误,它可以发送一个 retry 字段,指示客户端应该在多长时间后重试连接。例如:

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

在这个示例中,我们设置了一个 5 秒的重试时间,如果服务器在发送事件时遇到错误,则客户端将在 5 秒后重新连接。

ID 字段

如果服务器发送的事件具有唯一的 ID,它可以包含一个 id 字段,以便客户端可以跟踪事件。例如:

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

在这个示例中,我们设置了一个 ID 为 123 的事件,以便客户端可以在接收到其他事件时识别它。

事件类型

如果服务器发送的事件具有特定的类型,它可以包含一个 event 字段,以便客户端可以根据类型处理事件。例如:

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

在这个示例中,我们设置了一个类型为 time 的事件,以便客户端可以根据类型处理事件。

结论

Server-sent Events 是一种非常有用的技术,可以用于实时应用程序和其他需要实时通信的应用程序。它比 WebSocket 更简单,更轻量级,并且可以用于许多不同的用例。

在本文中,我们介绍了如何使用 SSE,并提供了一些高级用法示例。希望这篇文章对你有所帮助!

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/673adf3a39d6d08e88b03f65