如何使用 Server-Sent Events 在 ASP.NET 中构建实时聊天室

阅读时长 9 分钟读完

在这个快速变化的时代,实时通信变得越来越重要。而对于前端开发人员而言,Server-Sent Events(SSE)是构建实时通信功能的一个不错的选择。在本文中,我们将探讨如何在 ASP.NET 中使用 SSE 构建实时聊天室。

什么是 Server-Sent Events?

Server-Sent Events(SSE)是 HTML5 新增的一种浏览器与服务器通信方式。SSE 使得浏览器可以接收来自服务器的事件流(Event Stream),并实时展示给用户。SSE 的优势在于它可以与 HTTP 协议兼容,即不需要像 WebSocket 那样额外建立握手连接。

SSE 的工作原理

SSE 是一种简单的“长连接”实现方式,也就是说 SSE 可以通过保持连接的方式,持续接收来自服务器的事件流,从而将这些事件流实时展示给用户。下图为 SSE 的工作原理:

构建实时聊天室

在本文的示例中,我们将构建一个简单的实时聊天室应用。在这个聊天室中,任何人都可以发送消息,而这些消息将会在所有连接到聊天室的用户中实时展示。

准备工作

在我们开始编写代码之前,需要先安装一些必要的软件。首先,我们需要安装 ASP.NET Core 和 Visual Studio(建议使用 Visual Studio 2019)。

接下来,我们需要创建一个 ASP.NET Core 项目。这可以通过执行以下命令来完成:

执行完上述命令后,将会创建一个名为 ChatRoom 的 ASP.NET Core 项目。

编写代码

添加聊天室页面

我们首先需要添加聊天室的页面。在 Views 目录下创建一个名为 ChatRoom.cshtml 的文件,并将其内容设置为以下内容:

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

上述代码创建了一个简单的 HTML 页面,其中包含一个消息输入框、一个发送消息按钮和一个消息展示容器。

实现 SSE

接下来,我们需要实现 SSE。在 Controllers 目录下创建一个名为 SSEController.cs 的文件,并将其内容设置为以下代码:

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

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

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

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

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

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

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

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

上述代码创建了一个名为 SSEController 的控制器,并实现了 SSE。在 SSE 中,我们使用了 StreamWriter 将事件流写入到 Response 中,并在循环中实时检查数据库中是否有新的聊天记录。在这个示例中,我们使用了 Entity Framework Core 进行数据库操作。

处理消息发送请求

接下来,我们需要处理用户发送消息的请求。在 Controllers 目录下创建一个名为 ChatController.cs 的文件,并将其内容设置为以下代码:

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

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

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

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

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

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

上述代码创建了一个名为 ChatController 的控制器,并处理了用户发送消息的请求,这里我们使用了 Entity Framework Core 进行数据库操作。

实现前端代码

最后,我们需要实现前端代码。在 wwwroot 目录下创建一个名为 chat-room.js 的文件,并将其内容设置为以下代码:

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

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

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

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

上述代码实现了前端代码,并在 source.onmessage 中实时接收服务器发送的 SSE 事件并展示在聊天室页面上。

总结

本文介绍了如何在 ASP.NET 中使用 SSE 构建实时聊天室应用,包括如何实现 SSE、如何处理消息发送请求和如何实现前端代码。希望此文对大家有所帮助。

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

纠错
反馈