Deno 中如何使用 WebSockets 进行点对点消息传递

阅读时长 7 分钟读完

Deno 中如何使用 WebSockets 进行点对点消息传递

WebSockets 是一种能够在客户端和服务器之间实现双向通信的协议,相对于传统的 HTTP 请求,WebSockets 的特点在于可以请求多次而不会发送额外的 HTTP 请求,从而实现更实时的双向通信。Deno 是一个现代的 JavaScript 和 TypeScript 运行时,它提供了许多有用的 API,包括 WebSockets。本篇文章将介绍如何在 Deno 中使用 WebSockets 进行点对点消息传递。

  1. Deno 中的 WebSockets API

Deno 中的 WebSockets API 采用异步风格,设置一个 WebSocket 服务器非常简单,只需要监听一个 TCP 连接,并通过 accept() 方法来接受连接。以下是一个简单的示例代码:

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

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

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

在此示例代码中,我们首先创建了一个 HTTP 服务器来监听端口 3000,当请求到达服务器时,我们通过 acceptable() 方法来确定这个请求是否可以接受 WebSocket 连接。如果是,我们通过 acceptWebSocket() 方法来接受连接,在连接建立后,我们进入了一个无限循环中,可以通过 sock 对象来接收和发送消息。

  1. Deno 中使用 WebSockets 进行点对点消息传递

有了 WebSocket 服务器之后,我们可以在 Deno 中使用 WebSockets 进行点对点消息传递。为了实现这一目标,我们需要对我们的 WebSocket 服务器进行一些修改,以便为每个 WebSocket 连接创建一个唯一标识符(UUID),并将这个标识符保存在一个对象中,以便后续使用。以下是修改后的示例代码:

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

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

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

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

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

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

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

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

在此示例代码中,我们为每个 WebSocket 连接创建了一个唯一标识符,并将它与该连接一起保存在一个名为 usersMap 中。我们还在连接建立后,将其 ID 发送回客户端,以便客户端知道其 ID。我们进入到一个无限循环中来处理来自客户端的消息。这些消息可以是点对点的,也可以是广播型的。针对点对点的消息,我们将消息发送到目标客户端,如果客户端不存在,则将消息广播给所有连接的用户。通过此方法,我们可以实现在 Deno 中使用 WebSockets 进行点对点消息传递。

结论

WebSockets 提供了一种有效的机制来实现实时的双向通信。Deno 提供了 WebSockets API 来支持在 Deno 中创建 WebSocket 服务器。通过本文中的示例代码,我们可以在 Deno 中使用 WebSockets 进行点对点消息传递,并采用广播模式以进行消息的广播。同时,我们也了解了如何在 Deno 中创建一个 WebSocket 服务器,创建唯一的客户端标识符,并使用 WebSockets API 进行点对点消息传递。

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

纠错
反馈