在 Deno 中使用 WebSocket 进行实时聊天的实现

阅读时长 7 分钟读完

WebSocket 是一种基于 TCP 协议的高级实时通信协议。在前端开发中,我们通常使用 WebSocket 来实现实时通信。而在 Deno 中,我们同样可以使用 WebSocket 进行实时聊天的实现。本文将介绍如何在 Deno 中使用 WebSocket 实现实时聊天,并附上完整的示例代码。

安装 Deno

首先,我们需要安装 Deno。Deno 是一个安全的 JavaScript 和 TypeScript 运行时环境,它使用 V8 引擎和 Rust 语言编写。在 Deno 中,我们可以像在浏览器中一样使用 JavaScript 和 TypeScript 进行编程。Deno 的安装非常简单,只需要在终端中运行以下命令即可:

创建 WebSocket 服务器

在 Deno 中,我们可以使用标准库中的 ws 模块创建 WebSocket 服务器。以下是创建 WebSocket 服务器的示例代码:

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

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

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

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

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

在上述代码中,我们首先创建了一个 HTTP 服务器并监听 8080 端口。然后,我们使用 acceptWebSocket 函数创建了一个 WebSocket 连接。最后,我们通过 for await...of 循环来监听 WebSocket 事件,并在接收到文本消息时回复相同的消息。

创建 WebSocket 客户端

现在,我们可以创建一个简单的 WebSocket 客户端来测试我们的 WebSocket 服务器。以下是创建 WebSocket 客户端的示例代码:

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

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

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

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

在上述代码中,我们创建了一个 WebSocket 对象并连接到我们刚才创建的 WebSocket 服务器。然后,我们在 WebSocket 连接建立成功后发送了一条文本消息,并在接收到文本消息时输出消息内容。最后,我们在 WebSocket 关闭时输出关闭代码和原因。

实现实时聊天

现在,我们已经成功地创建了一个 WebSocket 服务器和一个 WebSocket 客户端。接下来,我们可以使用这两个组件来实现实时聊天。以下是实时聊天的示例代码:

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

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

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

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

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

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

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

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

在上述代码中,我们使用 Set 数据结构来存储所有 WebSocket 连接。当我们接收到文本消息时,我们会向所有的 WebSocket 连接发送相同的消息。

同时,我们在监听 WebSocket 关闭事件时,从 sockets 集合中删除已经关闭的连接,确保已经关闭的 WebSocket 连接不会再次被使用。

总结

在本文中,我们学习了如何在 Deno 中使用标准库中的 ws 模块创建 WebSocket 服务器和 WebSocket 客户端。我们还实现了一个简单的实时聊天应用程序,让你更好地了解 WebSocket 的使用。希望这篇文章对您有所帮助,让你更好地了解 Deno 和 WebSocket 的基础知识。

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

纠错
反馈