在 Deno 中使用 WebSockets 多人聊天室的实现

阅读时长 8 分钟读完

概述

WebSocket 是用于在客户端和服务器之间建立双向实时通信通道的协议。Deno 是一个安全的 JavaScript/TypeScript 运行时环境。本文将介绍如何在 Deno 中使用 WebSocket 实现多人聊天室功能。

WebSocket 基础

WebSocket API 包含在 Deno 标准库中。客户端和服务器可以通过以下代码创建一个 WebSocket 连接:

WebSocket 服务器需要监听 connection 事件,并通过该事件在客户端之间传递消息。以下是一个简单的 WebSocket 服务器实现:

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

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

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

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

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

handleWebSocket 函数中,我们可以处理收到的消息并将其发送回客户端。以下是一个简单的处理函数,将从某个客户端收到的消息广播给其他客户端:

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

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

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

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

以上代码将每个新连接推送到 clients 数组中,并对每个连接上的 string 消息进行广播。在 for await 循环中处理消息,并且在收到一个关闭事件时,从 clients 数组中删除该连接。

实现聊天室

我们使用 ES6 class 语法来实现聊天室类,该类将扩展 WebSocket 类。聊天室需要处理以下事件:

  • connection: 一个新连接时触发,将其推送到 clients 数组中。
  • message: 接收到一个消息时触发,在聊天室中广播该消息。
  • close: 断开连接时触发,将其从 clients 数组中删除。
-- -------------------- ---- -------
----- -------- ------- --------- -
  -------- ----------- - ---

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

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

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

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

现在我们可以将此类用作 WebSocket 服务器的事件处理程序。以下是使用 ChatRoom 类的完整服务器实现:

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

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

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

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

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

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

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

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

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

结论

在 Deno 中使用 WebSocket 实现多人聊天室非常简单。只需使用 WebSocket API 和我们编写的聊天室类即可。通过使用该示例代码,你可以轻松开始构建自己的实时应用程序,如聊天室、实时评论等。

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

纠错
反馈