如何在 Deno 中使用 WebSockets 和 REST API 以实现实时数据传输?

阅读时长 8 分钟读完

在前端领域中,实时数据传输是非常常见的情景,比如在线聊天、实时数据展示等等。本篇文章将介绍如何使用 Deno 框架来实现 WebSockets 和 REST API 结合的方式来实现实时数据传输。

什么是 Deno?

Deno 是一个基于 TypeScript 构建的 JavaScript 和 TypeScript 运行时环境,它是 V8 引擎和 Rust 语言实现的。Deno 提供了一个安全的执行 JavaScript 和 TypeScript 的环境,并且支持原生的模块化。

WebSocket 简介

WebSocket 是一种类似于 HTTP 的协议,是客户端和服务器之间进行双向实时通信的一种方式。它可以通过一次握手建立连接,然后双方都可以随时向对方发送消息,就像两个人在通话一样。WebSocket 一般被用来实现实时性比较高的应用程序,如聊天室、游戏等。

REST API 简介

REST 是一种软件架构,是一种约束性的架构风格,可用于设计分布式系统。REST API 就是一个 RESTful 的 Web 服务。REST API 使用 HTTP 协议来传输数据,并通过 HTTP 动词(GET、POST、PUT、DELETE、PATCH 等)来操作资源。

实现步骤

1. 搭建 Deno 环境

首先,需要安装 Deno 运行环境,可以在 Deno 官网 下载安装包进行安装。

2. 实现 WebSocket

Deno 提供了 WebSocket API,可以使用它来实现 WebSocket 的功能。

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

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

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

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

上述代码启动了一个 WebSocket 服务,并且使用 acceptWebSocket 接收客户端发来的请求,使用 handleWs 函数处理请求并实现双向通信。

3. 实现 REST API

在 Deno 中,可以使用 Oak 这个 Web 框架来实现 REST API 的功能。

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

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

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

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

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

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

上述代码启动了一个 REST API 服务,并且使用 router 对路径进行了处理,通过 ctx.response.body 来返回相应数据。

4. 结合 WebSocket 和 REST API

当使用 REST API 返回数据时,可以将该数据发送给 WebSocket 客户端。

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

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

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

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

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

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

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

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

上述代码结合了 WebSocket 和 REST API,当客户端连接时,会将 WebSocket 实例加入 sockets 数组中。代码中使用 setInterval 定时获取数据(即 users),并将该数据封装成一个 JSON 对象,然后通过 WebSocket 将数据发给客户端,客户端接收到数据后进行更新。

总结

通过本文的介绍,我们了解了如何在 Deno 中使用 WebSockets 和 REST API 以实现实时数据传输。WebSocket 和 REST API 经常被用于实现实时性比较高的应用程序,可以通过 Deno 轻松地实现这些功能。

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

纠错
反馈