如何在 Express.js 中使用 WebSocket 实现实时通信?

实时通信是现代 Web 应用程序中基本的需求。WebSocket 是一种推荐的实现方法,它可以在客户端和服务端之间建立持久连接,并支持数据双向传输。在本文中,我们将探讨如何在 Express.js 中使用 WebSocket 实现实时通信。

什么是 WebSocket?

WebSocket 是一种双向通信协议,可以在 Web 应用程序和 Web 服务器之间建立持久连接。它允许 Web 应用程序发送和接收数据,而无需频繁地使用 HTTP 请求和响应。WebSocket 通过 HTTP 握手来建立初始连接,然后切换到 WebSocket 协议进行实时通信。

WebSocket 与 HTTP 的主要区别是,WebSocket 连接是持久的,可以在单个 TCP 连接上发送多个消息。这使得它非常适合需要实时通信的 Web 应用程序,如聊天室、游戏和实时数据可视化。

在 Express.js 中使用 WebSocket

下面是一个很简单的示例,演示如何在 Express.js 中使用 WebSocket。我们将建立一个简单的聊天室,允许用户在不刷新页面的情况下实时发送和接收消息。

  1. 首先安装 ws 模块,它是一个流行的 WebSocket 库,使 WebSocket 构建得非常简单。
--- ------- --
  1. 然后在 Express 应用程序中启动 WebSocket 服务器。
----- ------- - ------------------
----- --- - ---------
----- ------ - ---------------------------------
----- -- - ----------------------------

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

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

上面的代码中,我们使用 socket.io 库创建一个 WebSocket 服务器,并在连接事件中添加了日志记录。现在,当用户连接到服务器时,我们将在控制台上收到消息“a user connected”。

  1. 接下来,我们将添加一些事件,以便在客户端发送和接收消息。在服务器脚本顶部,添加以下代码。
----- --------- - -------------
----- --- - --- ------------------ ------ --

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

上面的代码中,我们创建了一个 WebSocket 服务器,并在连接事件中添加了一个回调函数。每当客户端发送消息时,我们会向所有其他连接的客户端发送该消息。

  1. 现在我们需要创建一个前端页面,以允许用户发送和接收消息。在项目目录下,创建一个名为“public”的文件夹,并在其下创建一个名为“index.html”的文件。
--------- -----
----- ----------
  ------
    ----- ----------------
    ----------- ------------
  -------
  ------
    ----- ----------
      ------ ----------- ---------- ------------------ ----------------- ---- ------- ---------
      ---------------------
    -------
    --- -------------------
    ------- ---------------------------------------
    --------
      ----- ------ - -----
      ----- ---- - --------------------------------
      ----- ----- - ---------------------------------
      ----- -------- - ------------------------------------

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

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

上面的 HTML 文件中包含一个表单输入框、一个消息列表和一些 JavaScript 代码。当用户在输入框中键入文本并点击发送按钮时,我们将使用 WebSocket 将消息发送到服务器。服务器将该消息广播到所有连接的客户端,然后我们将该消息添加到消息列表中。

  1. 最后,我们需要将静态资源(如 HTML、CSS 和 JavaScript 文件)提供给 Express 应用程序。在服务器脚本中,添加以下代码。
---------------------------------

这将允许客户端访问任何存储在 public 文件夹中的静态资源。现在启动应用程序,然后在浏览器中打开 localhost:3000。您应该看到一个聊天室界面,允许您发送和接收消息。

总结

在本文中,我们介绍了 WebSocket 协议以及如何在 Express.js 中使用它。我们构建了一个简单的聊天室应用程序,允许用户实时发送和接收消息。这是一个很好的起点,用于了解如何将 WebSocket 集成到您的 Web 应用程序中,以便创建实时通信功能。

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


猜你喜欢

  • 使用 Kubernetes 进行高可用 Nginx 部署

    前言 在进行 Web 开发时,Nginx 是不可替代的重要组件之一。Nginx 具有高性能和可扩展性,能够作为反向代理、负载均衡和静态文件服务器等多种用途。 Kubernetes 是一个广泛应用于容器...

    1 年前
  • Redux-thunk 的实现原理及应用场景

    在 React 的项目中,Redux 是一个非常重要的状态管理库,它能够帮助我们更好地管理组件间的状态。但是在某些情况下,Redux 本身并不能很好地处理异步操作,这时候就需要用到 Redux-thu...

    1 年前
  • 如何在 ECMAScript 2019 中使用 Async Generators 解决异步编程

    随着越来越多的异步代码在前端开发中使用,解决异步编程成为了前端开发中必不可少的一部分。在 ECMAScript 2019 中,引入 Async Generators 可以帮助我们更轻松地解决异步编程问...

    1 年前
  • Hapi.js 中的数据库操作:选择适合你的 ORM

    现代 Web 应用程序通常需要与数据库进行交互。Hapi.js 是一个流行的 Node.js 框架,可以帮助我们快速构建 Web 应用。在 Hapi.js 中,有很多方式来连接数据库。

    1 年前
  • 在 Fastify 服务中使用 Swagger UI

    介绍 Swagger UI 是一个流行的 API 文档生成工具,它可以自动生成 API 文档并提供一个漂亮的交互式用户界面,便于用户通过浏览器直观地了解和测试 API。

    1 年前
  • ES6 中的 for...of 循环更加优雅的遍历集合

    在以前,我们使用 for 循环来遍历集合,比如数组和对象。但是,ES6 中的 for...of 循环可以更加方便和简洁地遍历集合。在这篇文章中,我们将探讨 for...of 循环的用法和一些技巧,帮助...

    1 年前
  • Sequelize sequelize-auto 生成 Model 的使用方法

    在 Node.js 开发实践中,Sequelize是一个非常经典的ORM(Object-Relational Mapping)的库。它可以简化数据库操作的流程、提高开发效率,同时也避免了一些底层的数据...

    1 年前
  • 使用 ES11 中的可选链操作符处理 undefined 和 null 值

    在日常的前端开发中,我们经常需要处理一些来自后端或者用户输入的数据。在处理数据的过程中,我们经常会遇到一些 undefined 或者 null 的值,这些值会导致代码出现异常,从而影响程序的正常运行。

    1 年前
  • Serverless 如何实现自动伸缩?

    近年来,随着云计算技术不断发展,Serverless 架构在前端开发中越来越受到欢迎。Serverless 架构的特点是无需管理服务器,只需编写自己的代码,云服务提供商(如 AWS、Azure)即可根...

    1 年前
  • Docker Swarm 集群的任务调度与管理

    随着云计算的兴起以及微服务的流行,Docker 成为了一种广泛使用的容器化技术,它具有轻量、可移植、可扩展等优点。为了更好地管理和部署容器化应用,Docker Swarm 集群应运而生。

    1 年前
  • SSE 与 Websocket 的区别及优劣比较

    随着互联网技术的快速发展,前端与后端通信的方式也越来越多样化。其中,SSE(Server-Sent Events)和 Websocket 是两种常见的前端实现服务器推送的方式。

    1 年前
  • 如何在 Enzyme 中测试被 React.lazy() 包裹的组件

    Enzyme 是什么 Enzyme 是 React 的一个 JavaScript 测试工具,由 Airbnb 开源。它提供了一种简单的测试 React 组件渲染、交互和状态更改的方法。

    1 年前
  • Chai 报错:expected null to be an object,如何解决?

    当我们在用 Chai 进行一些 JavaScript 测试的时候,经常会遇到一些错误信息,比如 "expected null to be an object"。这种错误信息往往让我们感到困惑,不知道是...

    1 年前
  • ES7 新特性:函数对象的 Name 属性

    在 ES6 中,我们学习到了箭头函数、模板字符串、解构赋值等新特性,这使得我们的前端开发变得更加便捷和高效。而在 ES7 中,又有了一个与函数相关的新特性:函数对象的 Name 属性。

    1 年前
  • Deno 中的异步操作及解决方法

    前言 Deno 是一个旨在取代 Node.js 的 V8 引擎环境,它提供了新的 JavaScript 和 TypeScript 运行环境,并且能够在没有安装本地 Node.js 的情况下直接运行 J...

    1 年前
  • Angular 中使用 RxJS 实现重试机制的方法

    在实际的前端开发过程中,我们经常会遇到一些需要向服务器请求数据的场景,但是偶尔会发生网络连接不稳定,请求出错等状况。这时候如果我们只是简单地通过 setTimeout 等手段来实现重试机制,其实是比较...

    1 年前
  • SASS 中的列表使用技巧

    SASS 是一种流行的 CSS 预处理器,它提供了许多强大的功能,其中之一是列表。在 SASS 中,列表可以表示成一个元素的集合,这使得列表在前端开发中具有很多用途。

    1 年前
  • Windows下使用PM2搭建Node.js服务的完整流程

    在现代Web开发中,Node.js环境已经成为了一种必需品。同时,Node.js提供了很多优秀的开源库,如Express.js、Koa.js等,可以方便我们快速开发Web应用。

    1 年前
  • Material Design 设计规范与实践应用分享

    Material Design 是 Google 于 2014 年推出的设计语言,它基于传统的平面设计,添加了深度、动态、动画和交互的元素,旨在提供一种更具可视和有吸引力的用户体验。

    1 年前
  • CSS Grid 容器与项目

    CSS Grid 是可用于创建复杂布局的功能强大的 CSS 模块。借助 CSS Grid,可以将页面拆分为行和列,并使用这些行和列创建响应式布局。CSS Grid 实现了强大的自定义定位和对齐,使得进...

    1 年前

相关推荐

    暂无文章