使用 Deno 开发 WebSockets 客户端的最佳实践

阅读时长 7 分钟读完

在今天的 web 应用中,实时性很重要。最近几年,使用 WebSocket 替代 HTTP 请求和响应获取数据和完成交互变得越来越流行。在前端架构中, WebSockets 已经成为构建实时应用的必要选择。而 Deno 是最近出现的一个新的运行时环境,主要用于在浏览器外部运行 JavaScript,它的长处在于安全、模块化、开放性等等,同时还能够很好地支持 WebSocket。

WebSocket

WebSocket 是一种双向通信协议。它在建立连接后实现一个长时间保持开放状态的双向数据通道。与传统的 HTTP 请求和响应交互方式不同,WebSocket 可以在客户端和服务器之间建立一个实时的通信渠道。因此,它是构建实时的 web 应用的重要选择。WebSocket 采用配置简单、低延迟、高效的协议,不仅能够传递文本和二进制数据,还能够支持精细的错误处理和连接状态的维护。

Deno

Deno 是一种基于 V8 引擎的 JavaScript 和 TypeScript 运行时环境,由 Rust 编写,用于在浏览器外部运行 JavaScript。Deno 安全、支持模块化和开放性,支持 TypeScript 无需额外配置就可以运行,并且内置 HTTP 和 WebSocket 模块。

WebSocket 和 Deno 的结合

WebSocket 可以很好地支持实时的通信,而 Deno 可以便捷地编写 WebSocket 在客户端实现的脚本。使用 Deno 开发 WebSocket 客户端,我们需要了解以下最佳实践:

1. 使用标准 API

Deno 内置了 WebSocket 模块,我们可以通过 import 语句引进并使用。比如以下示例:

这个标准 API 可以很方便地实现 WebSocket 客户端和服务器的连接和通信。因此,我们应该尽可能地使用标准 API,而不是自己编写 WebSocket 的相关代码。

2. 保持连接

由于 WebSocket 是一个长连接,保持连接是很重要的。可以通过在客户端实现心跳机制,使连接保持稳定一段时间。另外,服务器端能够及时向客户端发送状态信息,在通信中查找错误,也是保持连接需要考虑的一个因素。

3. 回退机制

回退机制是指在网络连接没有启动或连接失败时,我们能够有一个简单的方法回退到另一个连接通道。这个机制是很重要的,因为网络连接不稳定或者其他问题都有可能导致 WebSocket 连接失败。大多数 WebSocket 库都提供了回调方法来处理这种情况。

4. 错误处理

WebSocket 易于出现一些错误,如连接断开、连接超时和数据处理错误。我们需要在开发中适时处理错误,如捕捉异常等等,并且记录日志,以便定位问题。

示例代码

下面是一个典型的 Deno WebSocket 客户端示例。该示例实现了 WebSocket 的创建和处理功能,确保了与服务器的长连接,以及处理了当连接出现异常时的情况。

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

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

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

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

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

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

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

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

在上面的示例中,我们创建了一个包含 URL 的 WebSocket 实例。在实例通过 onopen 回调函数与服务器建立连接后,创建信号变量 connected 来追踪连接状态,并打印一条日志。处理消息的 onmessage 函数被设置为打印消息内容。当连接断开时,onclose 函数将标记连接断开,并在 10 秒后再次尝试连接。类似地,WebSocket 连接发生错误时,onerror 函数将在控制台上记录错误并关闭 WebSocket 连接。

错误处理的实例代码

下面是一个实例代码,展示如何在 WebSocket 发送和接收数据时,处理错误。

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

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

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

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

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

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

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

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

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

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

在上面的代码中,我们定义了一个名为 sendData 的函数来发送 JSON 格式的数据。如果连接处于离线状态,该函数将打印一条消息,并返回,否则将发送数据。在接收消息时,我们使用 try .. catch 块来捕获 JSON 格式错误,并记录错误。在连接断开或错误发生时,我们使用标准回调函数来处理它们。

总结

WebSocket 是现代 web 应用必需的双向通信协议,并且在前端架构中使用得非常广泛。Deno 是一个新的运行时环境,支持 WebSocket 相关的可移植性和类型安全性。本文提出了 Deno 开发 WebSocket 客户端的最佳实践,这些实践应该帮助您提高开发 WebSocket 客户端的效率、减少错误和异常,并确保在长时间的连接中正确处理与服务器之间的通信。

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

纠错
反馈