使用 Deno 和 Oak 构建一个简单的聊天应用程序

阅读时长 7 分钟读完

前言

在现代 Web 开发中,前端技术已经不再仅仅只是 HTML、CSS 和 JavaScript 了。越来越多的前端工程师开始涉及到后端开发和全栈开发。而在后端开发中,Node.js 一直占据着主导地位。但是最近,一个新的 JavaScript 运行时环境 Deno 开始崭露头角。

Deno 是一个由 Node.js 的创始人 Ryan Dahl 开发的运行时环境,它具有更好的安全性、更好的性能、更好的开发体验等优点。在本文中,我们将使用 Deno 和 Oak 框架来构建一个简单的聊天应用程序,希望能够帮助读者更好地了解 Deno 和 Oak。

准备工作

首先,我们需要安装 Deno。你可以通过以下命令在 macOS 或 Linux 上安装 Deno:

或者,你可以在 Windows 上使用 PowerShell 安装 Deno:

安装完成后,你可以通过以下命令验证 Deno 是否已经成功安装:

接下来,我们需要安装 Oak 框架。你可以通过以下命令在命令行中安装 Oak:

构建一个简单的聊天应用程序

创建一个基本的服务器

首先,我们需要创建一个基本的服务器,用于处理客户端的请求。在 Deno 中,我们可以使用 Deno.listen() 函数来创建一个服务器。

在上面的代码中,我们使用 serve() 函数创建了一个服务器,并指定了端口号为 8000。然后,我们使用 for await ... of 循环来监听客户端的请求,并使用 req.respond() 函数来响应客户端的请求。在这个例子中,我们只是简单地返回了一个字符串 "Hello World"。

处理 WebSocket 连接

接下来,我们需要处理 WebSocket 连接。在 Deno 中,我们可以使用 Deno.upgradeWebSocket() 函数来升级 HTTP 请求为 WebSocket 连接。

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

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

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

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

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

  ---------------------- ---------------
-
展开代码

在上面的代码中,我们首先使用 acceptable() 函数来判断客户端请求是否为 WebSocket 连接请求。如果是 WebSocket 连接请求,我们就使用 acceptWebSocket() 函数来升级 HTTP 请求为 WebSocket 连接,并调用 handleWebSocket() 函数来处理 WebSocket 连接。

handleWebSocket() 函数中,我们使用 for await ... of 循环来监听客户端发送的消息,并将消息原样发送回客户端。

构建一个聊天室

现在,我们已经可以处理 WebSocket 连接了。接下来,我们将构建一个简单的聊天室,让多个客户端之间可以相互发送消息。

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

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

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

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

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

  ---------------------- ---------------
  -------------------
-
展开代码

在上面的代码中,我们首先创建了一个空的 Set 对象 sockets,用于保存所有连接到服务器的 WebSocket。然后,当有客户端连接到服务器时,我们就将该客户端的 WebSocket 添加到 sockets 中,并调用 handleWebSocket() 函数来处理 WebSocket 连接。

handleWebSocket() 函数中,我们首先使用 for await ... of 循环来监听客户端发送的消息,并将消息发送给所有连接到服务器的客户端。注意,我们需要判断当前客户端是否为消息的发送者,如果是的话就不需要再将消息发送回给自己了。

最后,当客户端断开连接时,我们需要将该客户端的 WebSocket 从 sockets 中删除。

总结

在本文中,我们使用 Deno 和 Oak 框架来构建了一个简单的聊天应用程序,并详细介绍了如何处理 WebSocket 连接和构建一个聊天室。希望本文能够帮助读者更好地了解 Deno 和 Oak,并在实际开发中运用它们来构建更好的 Web 应用程序。

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

纠错
反馈

纠错反馈