SSE 和 ASP.NET 的结合及实现

阅读时长 7 分钟读完

什么是 SSE?

SSE(Server-Sent Events)是一个 HTML5 的新特性,允许服务器向客户端发送事件流,实现了实时性的数据更新。

SSE 基于 HTTP 协议,不需要使用如 WebSocket 这样的独立协议,也不需要像 AJAX 那样的轮询来实现数据的实时更新。相比较而言,SSE 更加简单、轻量,且不会占用过多的服务器资源。SSE 可以被广泛应用于在线聊天、消息推送、实时股票行情、实时数据监控等场景。

如何在 ASP.NET 中实现 SSE?

下面将介绍如何在 ASP.NET MVC 中实现 SSE,通过代码实现 SSE 服务端的功能。

前置条件

  • Visual Studio 2017 或更高版本
  • .NET Framework 4.6.1 或更高版本

实现步骤

  1. 创建 ASP.NET MVC 项目

在 Visual Studio 中创建 ASP.NET MVC 项目,并将其命名为 SSEExample。

  1. 安装 Microsoft.AspNet.WebApi.Core 包

在 Visual Studio 的 NuGet 包管理器中搜索 Microsoft.AspNet.WebApi.Core 包,并进行安装。

  1. 创建 SSEController

在 Controllers 文件夹下创建 SSEController.cs,并添加如下代码:

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

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

该代码创建了一个名为 SSEController 的 Web API 控制器,并提供了一个名为 Get 的方法用于返回 SSE 事件流。在 SSE 事件流中,每一行数据都需以“data:”开头,以“\n\n”结尾。

  1. 配置路由

在 App_Start 文件夹下创建 RouteConfig.cs,并添加如下代码:

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

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

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

在 Global.asax.cs 中修改如下代码:

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

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

这样,我们就完成了 SSEController 的实现和路由的配置。

客户端页面

下面是客户端页面 SSEExample\Views\Home\Index.cshtml 的代码:

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

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

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

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

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

-------

该代码利用 HTML5 的 EventSource 对象实现了 SSE 的连接,当事件流中有新的消息到来时,页面就会自动更新显示新的消息。

总结

本文介绍了 SSE 技术的基本概念、如何在 ASP.NET 中实现 SSE 服务端,并提供了一个完整的示例代码。如果您需要实现一个实时的数据更新功能,SSE 绝对是一个不错的选择。

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

纠错
反馈