Express.js 中使用 WebSocket 实现实时通信的完整教程

简介

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。相比传统的 HTTP 协议,它可以实现实时通信,因此在实时通信场景下使用较为广泛。Express.js 是一种基于 Node.js 的 Web 框架,它提供了一个方便的方式来构建 Web 应用程序。

本文将介绍如何在 Express.js 中使用 WebSocket,实现实时通信功能。

准备工作

在开始之前,请确保已经安装了 Node.js 和 Express.js。如果没有安装,可以在官网上下载并安装。

在本文中,我们将使用 ws 模块来实现 WebSocket 功能。可以使用以下命令来安装:

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

实现方法

1. 创建 WebSocket 服务器

首先,我们需要创建一个 WebSocket 服务器。在 Express.js 中,可以使用 ws 模块的 WebSocket.Server 类来创建。

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

以上代码将创建一个 WebSocket 服务器,监听 8080 端口。

2. 监听 WebSocket 连接

接下来,我们需要监听 WebSocket 连接。在 WebSocket.Server 实例上,可以使用 connection 事件来监听连接。

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

以上代码将在有 WebSocket 连接时输出一条日志。

3. 发送消息

我们可以使用 WebSocket 实例上的 send() 方法来发送消息。

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

以上代码将向客户端发送一条消息。在实际应用中,可以根据业务需求来发送不同的消息。

4. 接收消息

在客户端发送消息时,我们需要在服务器端监听消息。可以使用 message 事件来监听消息。

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

以上代码将在接收到消息时输出一条日志。

5. 关闭连接

在客户端关闭连接时,我们需要在服务器端监听关闭事件。可以使用 close 事件来监听关闭。

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

以上代码将在连接关闭时输出一条日志。

示例代码

以下是一个完整的示例代码,演示如何在 Express.js 中使用 WebSocket 实现实时通信功能。

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

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

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

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

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

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

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

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

在上述示例代码中,我们创建了一个 Express.js 应用程序,同时也创建了一个 WebSocket 服务器。当客户端连接到 WebSocket 服务器时,将发送一条消息,并监听客户端的消息和关闭事件。

总结

本文介绍了如何在 Express.js 中使用 WebSocket 实现实时通信功能。通过使用 ws 模块,我们可以轻松地创建 WebSocket 服务器,并实现消息的发送和接收。希望本文能够对大家有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65f939abd10417a222503237