Deno 中如何使用 WebSocket API

阅读时长 8 分钟读完

WebSocket 是一种网络协议,用于实现客户端与服务器之间的实时通信,类似于 HTTP。Deno 是一个现代的 JavaScript 和 TypeScript 运行时环境,内置了 WebSocket API,可以方便地使用 WebSocket 进行开发。

本文将介绍如何在 Deno 中使用 WebSocket API,包括如何创建 WebSocket 服务器、如何监听客户端请求、如何发送数据以及如何处理错误等内容。有了这些知识,你就可以使用 WebSocket 在 Deno 中开发实时应用程序了。

创建 WebSocket 服务器

在 Deno 中创建 WebSocket 服务器非常简单,只需要创建一个 HTTP 服务器并将其升级为 WebSocket 服务器即可:

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

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

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

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

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

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

该代码将创建一个 WebSocket 服务器和一个 HTTP 服务器,并将其绑定到本地的 8000 端口上。当 HTTP 请求的 URL 为 /ws 时,处理 WebSocket 请求。否则,返回一个包含 WebSocket 客户端的 HTML 页面。

监听客户端请求

Deno 的 WebSocket API 具有响应式编程的特点,可以通过 for await 循环监听客户端请求,并处理相关事件,如 messagepingclose

在上面的示例代码中,handleWebSocket 函数用于处理 WebSocket 请求。该函数使用一个 for await 循环来监听客户端请求,并通过 isWebSocketCloseEventisWebSocketPingEventtypeof ev === "string" 等条件来区分不同类型事件。然后,根据事件类型,处理相应的逻辑,如打印日志、发送响应等。

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

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

发送数据

Deno 的 WebSocket API 提供了 WebSocket#send 方法,用于向客户端发送数据。在上面的示例代码中,当收到客户端发送的字符串时,使用 WebSocket#send 方法将字符串回显给客户端。

处理错误

在网络编程中,很容易遇到各种错误,例如客户端断开连接、网络故障等。为了保证程序的健壮性,需要及时处理这些错误。

在上面的示例代码中,如果出现异常,会将异常日志打印到控制台,并发送一个状态码为 1000 的关闭帧到客户端。这样可以保证客户端与服务器正常断开连接,避免出现不必要的错误。

总结

本文介绍了如何在 Deno 中使用 WebSocket API,包括如何创建 WebSocket 服务器、如何监听客户端请求、如何发送数据以及如何处理错误等内容。WebSocket 是一种实时通信协议,可以广泛应用于实时应用程序的开发中,例如聊天室、游戏、股票行情等。Deno 的 WebSocket API 简单易用,对于前端开发者来说是一种非常不错的选择。

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

纠错
反馈