Express.js 中如何使用 WebSocket 实现聊天室

在现代 Web 应用中,实时性已经成为了一个非常重要的需求。传统的 HTTP 协议无法满足这一需求,因此 WebSocket 应运而生。WebSocket 是一种基于 TCP 协议的全双工通信协议,可以在客户端和服务器之间建立持久性的连接,实现实时通信。

在本文中,我们将介绍如何使用 Express.js 和 WebSocket 实现一个简单的聊天室应用。

准备工作

首先,我们需要安装 expressws 这两个包:

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

接着,在 Express.js 中使用 WebSocket,我们需要创建一个 HTTP 服务器,并将其传递给 WebSocket 的构造函数:

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

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

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

在上面的代码中,我们创建了一个 Express.js 应用,并启动了一个 HTTP 服务器。接着,我们使用 WebSocket 的构造函数创建了一个 WebSocket 服务器,并将其绑定到 HTTP 服务器上。

实现 WebSocket 服务器

接下来,我们需要实现 WebSocket 服务器的逻辑。当客户端连接到服务器时,我们需要将其添加到一个房间中,并向所有的房间成员广播消息。

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

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

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

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

在上面的代码中,我们创建了一个 users 集合,用于保存所有连接到服务器的用户。当用户连接到服务器时,我们将其添加到 users 集合中。当用户断开连接时,我们将其从 users 集合中删除。

ws.on('message') 回调函数中,我们遍历所有的用户,并向除了发送消息的用户之外的所有用户广播消息。

实现聊天室客户端

现在我们已经实现了 WebSocket 服务器的逻辑,接下来我们需要实现聊天室客户端的逻辑。在客户端中,我们需要建立 WebSocket 连接,并发送和接收消息。

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

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

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

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

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

在上面的代码中,我们使用 WebSocket 的构造函数建立了与服务器的 WebSocket 连接。当连接建立成功后,我们输出一条日志。当接收到服务器发送的消息时,我们将其输出到控制台。

在 HTML 中,我们使用一个表单来接收用户输入的消息。当用户提交表单时,我们从输入框中获取消息,并使用 socket.send() 方法发送到服务器。

完整示例代码

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

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

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

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

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

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

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

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

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

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

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

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

总结

在本文中,我们介绍了如何使用 Express.js 和 WebSocket 实现一个简单的聊天室应用。我们首先创建了一个 HTTP 服务器,并将其传递给 WebSocket 的构造函数。接着,我们实现了 WebSocket 服务器的逻辑,将连接到服务器的用户添加到一个房间中,并向所有的房间成员广播消息。最后,我们实现了聊天室客户端的逻辑,建立 WebSocket 连接,并发送和接收消息。

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


猜你喜欢

  • ECMAScript 2016 中的 Array.includes() 方法的使用及注意事项

    在 ECMAScript 2016 中,新增了 Array.includes() 方法,该方法用于判断数组中是否包含指定的元素,返回一个布尔值。 语法 ------------------------...

    1 年前
  • TypeScript 中如何实现 Observable 模式

    Observable 模式是一种常见的设计模式,它用于将数据或事件的流推送给多个观察者,从而实现解耦和复用。在前端开发中,Observable 模式被广泛应用于响应式编程、状态管理、数据流管理等领域。

    1 年前
  • 使用 ES9 中的 Symbol.species 和 Symbol.matchAll

    ES9 中新增了两个 Symbol,分别是 Symbol.species 和 Symbol.matchAll。这两个 Symbol 可以帮助我们更好地处理一些常见的问题,同时也可以提高代码的可读性和可...

    1 年前
  • 如何使用 ECMAScript 2019 (ES10) 中新增的 Object.fromEntries() 方法来转换数组为对象

    在 ECMAScript 2019 (ES10) 中,新增了一个 Object.fromEntries() 方法,可以将一个由键值对组成的数组转换成一个对象。这个方法可以方便地将数组转换成对象,而不必...

    1 年前
  • 如何处理 GraphQL Mutation 和错误代码

    GraphQL 是一种用于 API 的查询语言,它提供了一个强大的、灵活的数据获取方式。在 GraphQL 中,Mutation 是一种特殊的查询类型,用于修改服务器上的数据。

    1 年前
  • PM2 日志记录及处理方法

    什么是 PM2? PM2 是一个 Node.js 进程管理器,它能够帮助我们管理 Node.js 应用程序的进程。它可以帮助我们在生产环境中监控应用程序的运行状态,自动重启应用程序并在系统故障时保持应...

    1 年前
  • Angular 中的 HttpClient 和 HttpInterceptor 详解

    在 Angular 中,我们经常需要通过 HTTP 请求获取数据或者向后台发送数据。Angular 提供了 HttpClient 和 HttpInterceptor 两个服务来帮助我们完成这些任务。

    1 年前
  • Flex 布局:理解 Flex 的 order 属性

    Flex 布局是一种非常流行的前端布局方式,可以快速构建响应式页面,实现各种复杂的布局效果。本文将重点介绍 Flex 布局中的 order 属性,帮助读者更好地理解和应用 Flex 布局。

    1 年前
  • Mocha 测试中如何检测代码覆盖率并生成测试报告

    在前端开发中,测试是保证代码质量和稳定性的关键步骤之一。Mocha 是一款流行的 JavaScript 测试框架,可以帮助开发者编写和运行各种类型的测试,如单元测试、集成测试和端到端测试等。

    1 年前
  • SASS 中的函数(Function)使用技巧及应用场景

    在前端开发中,我们经常使用 CSS 来为网页添加样式。SASS 是一个流行的 CSS 预处理器,它提供了许多强大的功能来帮助我们更好地管理和组织样式表。其中一个重要的功能就是函数(Function),...

    1 年前
  • Tailwind CSS 如何制作响应式陀螺仪效果

    前言 Tailwind CSS 是一款强大的 CSS 框架,它能够帮助开发者快速构建响应式网站,并提供了丰富的 CSS 类,能够满足开发者的各种需求。在本文中,我们将介绍如何使用 Tailwind C...

    1 年前
  • 在 Vue 项目中使用 ESLint + Prettier 打造高质量代码

    在前端开发中,代码质量是一个非常重要的问题。好的代码能够提高项目的可读性、可维护性和可扩展性。而在 Vue 项目中,我们可以使用 ESLint 和 Prettier 来帮助我们打造高质量的代码。

    1 年前
  • 如何用 Performance Optimization 优化开源项目性能?

    随着前端技术的不断发展,越来越多的开源项目涌现出来,为我们的开发工作提供了很多便利。然而,这些项目在实际运行过程中,可能会遇到性能问题。本文将介绍如何使用 Performance Optimizati...

    1 年前
  • 使用 Babel 编译 React 代码时遇到 "JSX expressions must have one parent element." 的错误怎么办?

    问题描述 在使用 Babel 编译 React 代码时,有时会遇到这样的错误提示: ------------ ----------------- --- ----------- ---- ---- -...

    1 年前
  • Serverless 架构部署中如何避免出现冲突问题

    Serverless 架构已经成为了现代化 Web 应用开发的主流之一,它不仅能够提高开发效率,还能够减少成本和维护工作。然而,Serverless 架构部署中可能会出现一些冲突问题,如何避免这些问题...

    1 年前
  • chai-http 实现接口测试及常见问题解决方法

    在前端开发中,接口测试是一个很重要的环节。chai-http 是一个基于 chai 框架的 HTTP 请求测试库,可以方便地进行接口测试。本文将介绍 chai-http 的使用方法,并解决一些常见问题...

    1 年前
  • ECMAScript 2017 中的 new.target 指向构造函数对象的问题

    ECMAScript 2017 引入了一个新的特性,即 new.target,它可以让我们在构造函数中获取到当前正在使用的构造函数对象。本文将详细讨论 new.target 的使用方法和其在前端开发中...

    1 年前
  • ES2020 中的 String#matchAll 让正则表达式更加灵活

    在 ES2020 中,新增了 String#matchAll 方法,它可以让我们更加灵活地处理正则表达式匹配的结果。在本文中,我们将深入探讨这个新特性,并且提供实际应用的示例代码,帮助读者更好地理解和...

    1 年前
  • 关于使用 SPA 框架时的 SEO 优化解决方法

    单页应用(SPA)框架的出现让前端开发更加高效,但是由于 SPA 框架对 SEO 的不友好,使得 SPA 应用的搜索引擎优化存在着很大的挑战。本文将介绍 SPA 框架的 SEO 问题,并提供一些解决方...

    1 年前
  • 如何使用 Jest 测试 Angular 应用

    在前端开发中,测试是一个至关重要的环节,它可以有效地提高代码质量和稳定性。而 Jest 是一个流行的 JavaScript 测试框架,它可以让我们轻松地编写和运行测试用例。

    1 年前

相关推荐

    暂无文章