使用 SSE 在 web 端和客户端之间实现数据双向通信

阅读时长 6 分钟读完

什么是 SSE?

SSE 全称 Server-Sent Events,服务器向客户端发送事件,它是 HTML5 中非常重要的 API 之一。SSE 通过使用普通的 HTTP 连接,在服务端发送数据到客户端。SSE 和 WebSocket 类似,也可以实现实时通信,但是与 WebSocket 不同的是,SSE 建立在 HTTP 请求上,可以利用 HTTP 服务器的各种特性,比如端口转发、用户身份验证、HTTPS 等等的。

如何使用 SSE?

前端使用 SSE 需要在客户端创建一个新的 EventSource 对象,指定 SSE 服务器的 URL。SSE 服务端使用 PHP、Node.js、Java 等编程语言实现,客户端便于开发和理解,一般使用 JavaScript。

浏览器兼容性:IE 不支持 SSE,支持 SSE 的浏览器包括 Chrome, Firefox, Opera 和 Safari。

以下是一个简单的示例:

服务端代码:

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

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

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

客户端代码:

数据双向通信

在服务端更新数据,客户端能够及时收到事件推送。但是如何实现客户端向服务端传递数据呢?这里就需要用到 SSE 的评论机制。在客户端通过 SSE 打开连接,服务端返回一个事件监听器。客户端可以发送账号、密码等数据通过这个监听器,经过服务端验证。客户端可以从服务端获得此连接的 ID,然后维护在一个变量中,之后可以向连接 ID 发送数据。

以下是一个简单的双向通信示例:

服务端代码:

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

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

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

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

- ---- -

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

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

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

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

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

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

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

-
--

客户端代码:

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

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

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

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

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

总结

以上是使用 SSE 实现 web 端和客户端之间实现数据双向通信的文档及示例代码。通过 SSE 可以非常方便地实现实时性需求的功能,并且 SSE 本身就是基于 HTTP 协议的,比较适合于现有的部署方式。但是 SSE 存在连接数受限、缺少二进制支持等问题,这也是使用 WebSocket 进行双向通信的主要原因。

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

纠错
反馈