使用 Express.js 在 Node.js 中实现基于 WebSocket 的聊天应用

WebSocket 是一种实时通信协议,它允许客户端和服务器之间交换数据,同时保持数据传输的持久连接。在前端领域,我们经常使用 WebSocket 来实现聊天应用、多人协作应用等实时性较高的场景。Express.js 是一种流行的 Node.js Web 框架,它提供了一组简单易用的 API,可以帮助我们轻松地搭建一个 WebSocket 服务器。本文将介绍如何在 Node.js 中使用 Express.js 实现一个基于 WebSocket 的聊天应用。

准备工作

在开始实现之前,我们需要安装必要的依赖:

  • Node.js:在官网下载并安装 Node.js。

  • Express.js:使用 npm 安装 Express.js,命令如下:

    --- ------- -------
  • WebSocket:使用 npm 安装 WebSocket,命令如下:

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

创建 Express 应用

首先,我们需要创建一个 Express 应用,并在其中引入 WebSocket。在项目根目录下创建一个名为 app.js 的文件,并写入以下内容:

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

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

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

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

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

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

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

这段代码创建了一个 Express 应用,并在其上创建了一个 WebSocket 服务。当有客户端连接到 WebSocket 时,会触发 connection 事件,并输出一条日志。当收到客户端发来的消息时,会广播这条消息给除了发送者以外的所有客户端。当有客户端断开连接时,也会输出一条日志。

为了方便启动应用,我们在工程目录下新建一个 package.json 文件并定义 start 脚本:

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

然后,我们在 Terminal 中进入工程目录,执行 npm start 命令启动应用。

编写客户端代码

接下来,我们要编写客户端的 HTML、CSS 和 JavaScript 代码。在项目根目录下创建一个名为 index.html 的文件,并写入以下内容:

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

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

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

这段代码实现了一个简单的聊天应用页面。它包括一个消息列表和一个输入框及发送按钮。当用户输入消息并点击发送按钮时,客户端会把消息发送给服务器。当服务器广播消息时,客户端会收到消息并将其添加到消息列表中。

调试代码

现在我们已经完成了程序的编写,可以在浏览器中打开 index.html 文件,看到客户端页面并开始收发消息。如果出现问题,可以在服务器端和客户端分别使用 Chrome 浏览器的开发者工具进行调试。

在 Chrome 浏览器中打开客户端页面,按下 F12 键,将开发者工具打开。选择控制台面板,可以看到客户端日志输出。如果 WebSocket 连接失败或无法发送消息,可以在控制台中查看错误信息和调试代码。

在 Terminal 中运行应用时,可以看到服务器端日志输出。如果 WebSocket 连接失败或收发消息出错,可以在服务器端查看错误信息和调试代码。

总结

在本文中,我们介绍了使用 Express.js 在 Node.js 中实现基于 WebSocket 的聊天应用的方法。我们首先创建了一个 Express 应用,并在其上安装了 WebSocket 服务,然后编写了客户端的 HTML、CSS 和 JavaScript 代码,最后调试了程序并发现解决了一些问题。通过这个例子,我们学习了如何在 Node.js 中使用 Express.js 和 WebSocket,以及如何编写实时通信应用的客户端和服务器代码。

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


猜你喜欢

  • 探究 Promise 的基础部分

    什么是 Promise? Promise 是一种异步编程的解决方案,它的作用是封装一个异步操作并返回一个 Promise 对象,以便在异步操作完成后进行处理。Promise 最常用的场景是通过 AJA...

    1 年前
  • MongoDB 定期清理过期数据的方法

    在使用 MongoDB 存储应用程序数据时,随着时间的推移,一些旧数据可能将变得不再有用或过时。清理这些过期的数据是保持数据库清洁和运行顺畅的重要部分。本文将介绍一些方法来定期清理MongoDB中的过...

    1 年前
  • Sequelize 中数据的分页查询详解

    随着互联网的发展,数据量越来越大,数据分页查询成为了前端开发中非常常见的需求。本文将结合 Sequelize 讲解数据分页查询的实现方法,旨在帮助前端开发者更好地应对分页查询的需求。

    1 年前
  • ES10 新特性之功能 hooks

    在前端开发中,我们经常会涉及到各种数据的异步获取、页面的渲染和交互等等工作,而这些工作都需要使用异步编程技术。ES10 新增了一项名为功能 hooks(Fucntion Hooks)的特性,它可以让我...

    1 年前
  • Cypress 测试 Promise 和异步处理技巧

    前言 在前端开发中,我们经常会遇到异步操作的场景,比如请求后端数据、DOM 更新等等。而异步操作的执行时间不确定,这就给测试带来了一些困难。Cypress 是一个强大的测试工具,可以帮助我们解决这个问...

    1 年前
  • Mongoose:使用 mongoose-paginate 实现分页查询

    前言 在开发前端应用中,我们经常需要对后台返回的数据进行分页展示,以提高用户体验和优化应用性能。而使用 Node.js 的开发者则可以利用 Mongoose 库轻松实现分页查询功能。

    1 年前
  • ECMAScript 2021 (ES12) 中的 BigInt 类型详解

    在 ECMAScript 2021 (ES12) 中,我们迎来了 BigInt 类型的引入。BigInt 类型用于表示任意精度的整数,解决了 JavaScript 中 Number 类型不能精确表示超...

    1 年前
  • 在 Deno 中使用 Redis 的方法

    在现代 web 开发中,如何优雅地处理 session 数据、存储状态和共享缓存已经成为了一个大而复杂的问题。由于 JavaScript 的限制,仅仅依靠浏览器的本地存储是不够的,并且如果我们所使用的...

    1 年前
  • Web Components 概述 - 1 - 为什么要使用 Web Components?

    前言 在现代 Web 开发中,我们经常需要使用大量的第三方组件库来完成我们的工作。但是这些组件库的质量、可维护性和兼容性却是参差不齐的。在此背景下,Web Components 的出现为我们提供了一个...

    1 年前
  • 如何使用 LESS 完成常见的浏览器 hack

    在我们开发前端项目的时候,经常会面临一些跨浏览器兼容性的问题。这些问题包括 CSS 样式在不同浏览器下的表现不一致,使用不同浏览器的私有前缀等。为了解决这些问题,我们通常需要使用一些 hack 技巧来...

    1 年前
  • 如何自动生成 Dimensions Sass / Tailwind CSS 类

    在前端开发中,我们常常会遇到需要定义元素的宽高、边距、字体大小等等样式。如果要一个个手动去定义这些样式,不仅费时费力,而且还容易出错。因此,自动生成 Dimensions Sass/Tailwind ...

    1 年前
  • SASS 编译后样式未生效

    在前端开发中,我们通常使用 SASS(Syntactically Awesome Style Sheets)来管理样式。SASS 是 CSS 的预处理器,它提供了更加灵活、简洁的语法,可以通过变量、函...

    1 年前
  • 无障碍开发实践之 iframe 标签的语义化处理

    前言 随着 Web 应用的飞速发展,无障碍开发已经成为一个必不可少的前端技能。而在无障碍开发中,语义化的 HTML 结构是至关重要的。因为它能够帮助用户理解页面内容,也能让搜索引擎更好地理解和索引页面...

    1 年前
  • Babel 配置文件 .babelrc

    什么是 Babel? Babel 是一款用于在浏览器中运行 JavaScript 的编译器。它可以将新标准的 ECMAScript 代码转换为旧的浏览器可用的 ES5 代码,从而使开发者可以使用最新的...

    1 年前
  • Jest 测试框架中你需要知道的命令行选项

    Jest是一个流行的JavaScript测试框架,它提供了很多命令行选项,便于开发人员进行各种类型的测试。在本文中,我们将探讨Jest测试框架中你需要知道的一些重要命令行选项,它们将帮助您更好的使用J...

    1 年前
  • 如何在使用 Custom Elements 时避免遇到 JavaScript 升级问题

    随着前端 Web 技术的不断发展和变化,需要将更多的业务逻辑放在客户端执行,而不是在服务器端完成。这使得前端技术受到更多的关注,开发者们也需要掌握这些新的技能。其中,Custom Elements 技...

    1 年前
  • 解决 AngularJS 单页面应用中的浏览器前进后退问题

    背景 AngularJS 是一种流行的前端框架,用于构建单页面应用(Single Page Application,SPA)。SPA 在浏览器中只加载一次,此后所有的交互都在客户端内部进行,通过使用 ...

    1 年前
  • PM2 如何进行应用程序的文件上传和下载?

    简介 在前端开发中,我们经常需要上传和下载各种文件,如图片、音频、视频等。而 PM2 是一款非常优秀的 Node.js 进程管理工具,可以非常方便地管理你的应用程序。

    1 年前
  • Docker 常见问题:无法访问公共镜像库的解决方法

    前言 在使用 Docker 进行开发或部署的过程中,我们经常会使用公共镜像库(比如 Docker Hub)来获取所需的镜像。然而,在一些情况下,我们可能会遇到无法访问公共镜像库的问题,这将严重影响我们...

    1 年前
  • 如何开发一个 PWA 应用?

    近年来,随着 Web 技术的不断发展,PWA(Progressive Web App)逐渐成为了 Web 应用开发的一个热门方向。PWA 是指一种可以在 Web 端表现出与 Native App 相近...

    1 年前

相关推荐

    暂无文章