如何在 ASP.NET Core 中使用 SSE

阅读时长 5 分钟读完

服务器发送事件(Server-Sent Events, SSE)是用于实时服务器与客户端之间通信的一项技术,它允许服务器向客户端发送异步消息。在本文中,我们将探讨如何在 ASP.NET Core 中使用 SSE。

SSE 概述

SSE 允许服务器通过一个 HTTP 连接向客户端推送事件。客户端可以通过一个简单的 JavaScript API 来接收这些事件。与 WebSocket 不同的是,SSE 是基于 HTTP 的,因此可以通过标准的 Web 端口(80)和基于 TLS 的 Web 端口(443)进行通信。此外,SSE 支持自动恢复,即当连接中断时,客户端会自动尝试重新连接到服务器。

SSE 是一个由 W3C 标准化的技术,其相关规范可以在 https://www.w3.org/TR/eventsource/ 找到。

ASP.NET Core 中使用 SSE

ASP.NET Core 是一个跨平台的、高性能的开源 Web 框架。它提供了一种简单的方式来实现 SSE。

ASP.NET Core 中使用 SSE 通常需要以下三个步骤:

  1. 创建一个返回 SSE 的 API。
  2. 客户端订阅该 API。
  3. 服务器向客户端推送事件。

1. 创建一个返回 SSE 的 API

在 ASP.NET Core 中,我们可以通过 HttpContext.Response.Body 发送 SSE 事件。下面是一个简单的 SSE API:

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

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

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

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

在上面的代码中,我们首先将 Content-Type 头设置为 text/event-stream ,这是 SSE 规范所要求的。接着,我们使用循环向客户端发送 10 个事件,每个事件包含一个 data 字段和一个空行。空行是必需的,它告诉客户端事件的结束。

注意,我们在每个事件发送后需要调用 FlushAsync() 方法,这是为了确保事件立即发送到客户端。

2. 客户端订阅 SSE API

在 HTML 中,我们可以使用 EventSource 来订阅 SSE API。下面是一个简单的 HTML 示例:

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

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

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

在上面的代码中,我们首先创建了一个 EventSource 对象,并传入 SSE API 的 URL。接着,我们定义了一个 onmessage 回调函数,当接收到事件时,将其内容添加到页面中的消息区域中。

3. 服务器向客户端推送事件

在 SSE 中,服务器可以在任何时候向客户端推送事件。在 ASP.NET Core 中,我们可以使用 IHttpContextAccessor 来获得当前客户端的 HttpResponse 对象,并将事件写入其 Body

以下是一个简单的服务器推送事件的示例:

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

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

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

在上面的代码中,我们定义了一个 MessageSender 类,其中的 SendMessageAsync 方法将一个消息写入当前客户端的 HttpResponse 对象中。

总结

本文介绍了如何在 ASP.NET Core 中使用 SSE。我们首先介绍了 SSE 的概念和优势,然后演示了如何使用 ASP.NET Core 创建 SSE API、客户端订阅 SSE API 和服务器推送事件。希望这篇文章能够为你提供一些指导和帮助。

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

纠错
反馈