Server-sent Events 和 Server Push:哪一个更适合实时应用程序?

阅读时长 5 分钟读完

前端开发中,实时应用程序是非常常见的需求。实时应用程序是指需要实时显示数据的应用程序,如在线聊天、股票行情等。为了实现实时显示数据,需要通过不断地向服务器发送请求来更新数据,这会给服务器带来很大的压力。为了解决这个问题,出现了两种解决方案:Server-sent Events 和 Server Push。

Server-sent Events

Server-sent Events(服务器发送事件)是 HTML5 规范中的一种实时通信方式,用于在客户端和服务器之间实现一种单向的持续连接。使用 Server-sent Events,服务器可以向客户端推送事件,并且客户端可以通过绑定监听器的方式监听这些事件。相比于传统的轮询方式,Server-sent Events 可以降低服务器的压力,提高应用程序的性能。

以下是一个 Server-sent Events 的示例代码:

-- -------------------- ---- -------
--------- -----
------
------
    ------------------ --------------
    ----- ----------------
-------
------
    ---- --------------------
    --------
        --- -------- - ------------------------------------
        --- ----------- - --- --------------------------
        --------------------- - --------------- -
            ------------------ -- ---------- - -------
        --
    ---------
-------
-------
展开代码

在这个示例中,使用了 EventSource 对象来连接一个被称为 server.php 的服务器脚本,服务器将向客户端发送事件,客户端通过监听事件来获取服务器发送的数据。

Server Push

Server Push 是一种新兴的技术,最开始是由 HTTP/2 协议提出的,它可以让服务器像客户端推送数据,而无需客户端发起请求。这种方式可以极大地提高应用程序的性能,因为服务器可以在客户端需要数据之前就将数据推送给客户端。但是,由于目前只有最新的浏览器支持 HTTP/2,因此 Server Push 的适用范围相对较窄。

以下是一个使用 Server Push 的示例代码:

-- -------------------- ---- -------
--------- -----
------
------
    ------------- ------------
    ----- ----------------
    ----- ---------------- -----------------
    ------- -----------------------
    ----- ------------- ---------------- ---------- ------------
    --------
        -- -------------- -- ------- -
            --------------------------------------------------------------------- -
                ------------------------------------
                    ---------------- -----
                    --------------------- -------------------------------------------------
                ------------------------------ -
                    ----------------- -- --------------
                ------------------------ -
                    --------------------- -- --------- --- ----- -- -------
                ---
            ------------------------ -
                ---------------------- ------ ------------ ------- -- -------
            ---
        -
    ---------
-------
------
    ----------- -- ------ ---------
    ---- --------------------
-------
-------
展开代码

在这个示例中,使用了 Service Worker 和 Push API 实现了 Server Push,客户端可以从服务器接收到推送的消息。但是需要注意的是,需要在客户端进行 Service Worker 的注册和推送消息的订阅等操作,因此实现 Server Push 的代码比较复杂。

哪一个更适合实时应用程序?

Server-sent Events 和 Server Push 都是实现实时应用程序的好方法,但是哪一个更适合在实际开发中使用呢?需要根据具体的情况来考虑。

如果应用程序需要支持的浏览器比较多,并且需要支持 IE11 及以下的浏览器,那么应该使用 Server-sent Events,因为 Server-sent Events 可以在所有浏览器上运行。

如果应用程序只需要支持比较新的浏览器,并且希望提高性能,那么应该使用 Server Push,因为 Server Push 可以让服务器在客户端需要数据之前就将数据推送给客户端,从而提高应用程序的性能。

综上所述,根据具体情况选择合适的实时通信方式是非常重要的。需要根据浏览器支持情况、应用程序的性能需求等方面来考虑选择哪种通信方式。

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

纠错
反馈

纠错反馈