Deno 中如何使用 WebSocket 实现聊天室?

WebSocket 是一种现代化的浏览器与服务器之间的实时双向通信技术,在现代 Web 应用程序中得到了广泛地应用。Deno 提供了一种简单的方式来使用 WebSocket 实现聊天室,本文将指导读者如何在 Deno 中使用 WebSocket 实现聊天室。

安装和使用 Deno

如果你还没有安装 Deno,可以通过官网提供的方式进行安装。安装完成后,可以使用命令行工具来运行 Deno。

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

创建 WebSocket 服务器

首先,我们需要创建一个 WebSocket 服务器,以便客户端可以连接到它并与服务器进行通信。在 Deno 中,可以使用标准库中的 WebSocket API 来创建 WebSocket 服务器。

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

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

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

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

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

这段代码首先创建了一个 HTTP 服务器,并在 3000 端口上开始监听。然后,它迭代了 HTTP 请求,检查每个请求是否符合 WebSocket 的要求,如果是,则通过 acceptWebSocket 来接受 WebSocket 连接,并将处理逻辑交给 handleWebSocket 函数处理。

handleWebSocket 函数非常简单,它发送一个“hello, world!”消息作为初始消息,并在接收到来自客户端的消息时打印该消息。这里需要注意的是,Socket 是在进行迭代(for await)时留给我们使用的异步迭代器。

使用聊天室功能

一旦我们完成了 WebSocket 服务器的初始化和连接,我们就可以开始添加聊天功能了。首先,我们需要对客户端发送的消息进行处理,并将其发送到所有连接的客户端。

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

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

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

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

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

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

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

这段代码创建了一个 Message 数据类型,用于表示聊天消息。它还在 handleWebSocket 函数的开头定义了一个数组 messages,用于存储所有聊天消息。当有新的消息到达服务器时,它会解析该消息并添加到 messages 中,并将消息发送到所有连接的客户端。

客户端会收到两种类型的消息:一种是历史消息,用于初始化聊天框;另一种是实时聊天消息,用于在新消息到达时更新聊天框。以下代码演示了如何处理这些不同类型的事件:

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

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

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

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

这段代码首先创建了一个 WebSocket 实例,并在连接打开时添加了一个事件监听器。在事件监听器中,它创建了一个输入框和一个“按下回车键并发送消息”事件监听器。在消息到达时,它解析了该消息并根据 type 属性执行相应的操作。如果 type 是“history”,它会向聊天框添加历史消息;如果 type 是“message”,它会向聊天框添加实时消息。

总结

本文演示了如何在 Deno 中使用 WebSocket 实现聊天室。我们首先创建了一个简单的 WebSocket 服务器,并将其扩展以支持聊天功能。然后,我们演示了如何在客户端中使用 WebSocket 进行通信。

WebSocket 在实时聊天中被广泛使用,并且是现代化 Web 应用程序的核心技术之一。Denno 提供了一种简洁、高效的方式来使用 WebSocket,并灵活地扩展它以支持任何类型的应用程序。通过使用 WebSocket 实现聊天室,我们可以获得更好的用户体验和更高的客户满意度。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66569d7ad3423812e4b799a5