如何使用 Deno 的 WebSocket API 来实现在线聊天室?

前言

Web 前端开发的快速发展,推动了 WebSocket 技术的应用。WebSocket 技术可以使 Web 应用程序实现双向实时通信,使得在线聊天室的实现成为可能。而 Deno 是一个安全的 JavaScript 和 TypeScript 运行时环境,它提供了支持 WebSocket API 的标准库。本文将介绍如何使用 Deno 的 WebSocket API 实现在线聊天室。

实现思路

为了实现在线聊天室,我们需要使用 WebSocket 技术建立客户端和服务器之间的实时双向通信。客户端通过 WebSocket 连接服务器,向服务器发送消息,服务器接收消息后进行处理,并将处理结果通过 WebSocket 返回给客户端。为了实现多个客户端之间的聊天,我们需要在服务器端维护一个消息队列,并将消息转发给所有已连接的客户端。

准备工作

在开始正式的代码实现之前,我们需要先安装 Deno 运行时环境。Deno 的安装非常简单,只需要在终端中运行以下命令即可:

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

安装完成之后,我们可以在终端中输入以下命令,检查是否安装成功:

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

如果成功输出了 Deno 的版本号,则表示安装成功。

代码实现

服务器端代码

首先,我们需要编写服务器端的代码。服务器端需要维护一个消息队列,用于存储客户端发送的消息。在这里,我们采用 Map 结构来实现消息队列,其中键为客户端的 WebSocket 连接,值为一个数组,用于存储该客户端发送的消息。

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

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

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

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

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

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

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

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

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

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

代码解释:

  • import 语句用于导入需要使用的依赖库。
  • serve 函数用于创建一个 HTTP 服务器,并监听指定端口。在这里,我们监听了 3000 端口。
  • acceptable 函数用于判断是否为 WebSocket 连接请求。如果是 WebSocket 连接请求,则通过 acceptWebSocket 函数创建 WebSocket 连接。
  • handleWebSocket 函数中,首先将客户端 WebSocket 连接添加到消息队列中,然后监听客户端 WebSocket 连接。当接收到客户端发送的消息时,将消息添加到该客户端的消息队列中,并将消息转发给所有客户端。最后,将客户端 WebSocket 连接从消息队列中移除。

客户端代码

接下来,我们需要编写客户端的代码。客户端需要通过 WebSocket 连接服务器,向服务器发送消息,接收服务器返回的消息。

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

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

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

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

代码解释:

  • 首先,我们通过 WebSocket 构造函数创建一个 WebSocket 对象,并指定连接的服务器地址和端口号。
  • ws.onmessage 函数中,当接收到服务器发送的消息时,创建一个 div 元素用于显示该消息,并将其添加到聊天框中。
  • 在发送消息时,首先获取用户名和消息内容,然后将它们拼接成一个字符串,并通过 ws.send 方法发送给服务器。

运行程序

在终端中运行以下命令启动服务器端代码:

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

在浏览器中打开以下地址,即可访问客户端界面:

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

在客户端界面中输入用户名和消息内容,并点击发送按钮即可发送消息给其他客户端。在成功连接服务器后,即可和其他客户端进行实时聊天。

总结

本篇文章介绍了如何使用 Deno 的 WebSocket API 实现在线聊天室。我们首先介绍了实现思路,然后分别编写了服务器端代码和客户端代码,并最终运行程序测试程序是否正常运行。WebSocket 技术广泛应用于实现在线聊天室、实时数据传输等场景,掌握 WebSocket 技术可以为前端开发人员带来更多的开发可能性。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64cec334b5eee0b5256686ec


猜你喜欢

  • 使用 Jest 测试 Vue 应用程序的实用指南

    使用 Jest 测试 Vue 应用程序的实用指南 前言 随着前端应用程序规模的不断扩大,测试变得越来越重要。在 Vue 应用程序中,Jest 是一种流行的 JavaScript 测试框架之一。

    1 年前
  • 徒手实现 ES8 的 String.prototype.padEnd() 和 String.prototype.padStart() 方法

    在 ES8 中,JavaScript 引入了 String.prototype.padEnd() 和 String.prototype.padStart() 方法,它们可以让我们更方便地将一个字符串填...

    1 年前
  • SequelizeORM 中的连接池配置

    前言 SequelizeORM 是 Node.js 中一种比较流行的 ORM 框架,它可以帮助我们更方便地对数据库进行操作,而其中连接池的配置则对于系统的性能表现有着直接的影响。

    1 年前
  • ESLint 如何检查过度使用的 console.log 语句

    ESLint 如何检查过度使用的 console.log 语句 在 JavaScript 开发中,console.log 是一种常用的调试手段,用于输出变量或信息。

    1 年前
  • RxJS 中 combineLatest 操作符详解

    RxJS 是一个功能强大的 JavaScript 库,它提供了一整套操作符和工具来处理异步数据流。其中,combineLatest 操作符是一个非常有用的操作符,它可以组合多个 observables...

    1 年前
  • 分布式锁实现方案及 Redis 实现

    概述 在分布式系统中,多个进程或服务需要对共享的资源进行操作,为了保证数据的一致性和完整性,需要实现分布式锁。分布式锁的实现可以使用不同的方案,本文将介绍其中一种基于 Redis 的分布式锁实现方案。

    1 年前
  • 如何使用 SASS 进行快速 UI 设计

    在现代的 web 开发中,UI 设计已经扮演了越来越重要的角色。使用 CSS 来实现复杂的 UI 设计一直是一个挑战,但是我们可以使用 SASS 来更加高效地管理和设计我们的样式。

    1 年前
  • Tailwind CSS 中常见的调试技巧

    Tailwind CSS 是一个非常流行的前端框架,可以帮助开发者快速构建现代化的网站和应用程序。虽然使用 Tailwind CSS 极其简单,但在编码过程中还是会遇到一些问题,例如样式不生效、排版出...

    1 年前
  • Next.js 中如何使用 Apollo Client?

    介绍 Next.js 是一款由 Vercel 开发的 React 应用程序的轻量级框架。它简化了开发过程,并提供了一些内置功能,如服务器渲染和静态导出等。而 Apollo Client 是一款流行的 ...

    1 年前
  • Dockerfile 容器化部署 Vue 应用

    Dockerfile 容器化部署 Vue 应用 Docker 是一种容器化技术,通过将应用程序打包成独立的容器,使其能够在任何地方运行,并且能够更快更简单地进行部署和管理。

    1 年前
  • 使用 Mongoose 实现自动化回传测试结果

    Mongoose 是 Node.js 的一个异步对象模型和管理工具,它提供了一种优雅的方式来管理 MongoDB 数据库。在前端开发中,我们会经常需要对后端的接口进行测试,并且需要将测试结果自动回传回...

    1 年前
  • ECMAScript 2021 (ES12) 中如何使用 Object.entries 和 Object.fromEntries 快速转换数据

    随着前端技术的不断发展,JavaScript 语言的标准也在不断更新。ECMAScript 2021(也叫 ES12)是最新的 JavaScript 标准,它引入了一些新的语言特性。

    1 年前
  • Socket.io 如何实现广播消息

    Socket.io 是一个实时通信的库,提供了 WebSocket 协议的兼容性,可以用于在客户端和服务器之间建立实时双向连接。在前端开发中,Socket.io 是一个非常常见的工具,可以用于实现类似...

    1 年前
  • 解析 ES10 中的可选链 (Optional Chain) 及使用方式

    可选链 (Optional Chain) 是 ES10 引入的一种新特性,它主要是为了解决在访问深层次嵌套的对象时,出现属性不存在而导致程序抛出异常的问题。本篇文章将详细介绍可选链的语法、使用方式和注...

    1 年前
  • Kubernetes 中的 Dashboard 使用详解

    随着云计算技术的不断发展,Kubernetes 已成为现代云计算环境下最重要的容器编排平台之一。Kubernetes Dashboard 是一个非常实用的工具,它提供了用户友好的图形界面,方便用户对 ...

    1 年前
  • PWA 仅缓存关键资源的低延迟策略实现

    前言 PWA,即 Progressive Web App,是一种新型的 Web 应用开发模式,它结合了 Web 应用和原生应用的优点,并能够实现离线访问、推送通知等功能,用户体验类似于原生应用。

    1 年前
  • AngularJS 中的 “10 $digest iterations reached” 问题:如何解决?

    什么是 $digest iterations reached 问题? 在使用 AngularJS 进行开发时,你可能会遇到这个错误:10 $digest iterations reached. Abo...

    1 年前
  • Android 无障碍模式中的文本编辑技巧

    随着科技的不断发展,无障碍模式被越来越多人所重视和使用。无障碍模式提供了一种更加易于操作的方式,帮助人们解决在使用设备和应用时遇到的各种障碍。而在 Android 系统中,无障碍模式也得到了广泛应用。

    1 年前
  • 如何使用 Fastify 实现服务器端渲染 (SSR)

    在前端开发中,服务器端渲染 (Server-Side Rendering, SSR) 是目前较为流行的一种技术方案。它能够在服务器端将数据渲染成 HTML,然后再将 HTML 返回给客户端,从而加快页...

    1 年前
  • Promise 在 Express.js 框架中的应用实例分享

    Promise 在 Express.js 框架中的应用实例分享 前端开发的世界变化非常迅速,随着业务逻辑越来越复杂,异步编程已经成为不可避免的一部分,而 Promise 正好能在一定程度上解决这个问题...

    1 年前

相关推荐

    暂无文章