如何在 Express.js 中使用 WebSocket 实现即时通讯系统

阅读时长 5 分钟读完

在 Web 应用程序中,即时通信是一种重要的功能,尤其在某些应用程序如聊天室和在线游戏中更是不可或缺的。在实现即时通信功能时,WebSocket 技术是一种较为常用和可靠的解决方案。本文将指导你如何使用 WebSocket 技术在 Express.js 中实现实时通讯系统。

什么是 WebSocket?

WebSocket 是 HTML5 新增的协议,它提供双向的通信机制,可以在客户端和服务器之间创建持久性连接,以传输低延迟,高效率的实时数据。WebSocket 协议是基于 TCP 协议的,可以在浏览器和服务器之间建立一个可控的双向通信通道。

WebSocket 的工作原理

与 HTTP 请求不同,WebSocket 请求的头部将带有 Upgrade 字段,指示服务器其请求是从 HTTP 协议升级的 WebSocket 协议。当服务器收到这个请求时,它将发回一个响应,表明协议转换成功。之后,客户端和服务器之间的通信将遵循 WebSocket 协议,直到连接关闭为止。

在 WebSocket 连接期间,客户端和服务器可以发送任意数量的数据,并且数据可以在两端之间实时地双向传输。此外,WebSocket 连接是持久的,这意味着与 HTTP 请求不同的是,客户端和服务器之间的在线路连接不会在单个请求期间关闭。

在 Express.js 中启用 WebSocket

要在 Express.js 中使用 WebSocket,我们需要使用一种第三方 WebSocket 库。在本文中,我们将使用 WebSocket-Node 库来实现我们的即时通讯系统。

安装 WebSocket-Node

使用以下命令来安装 WebSocket-Node:

实现 WebSocket 服务器

我们将使用 Express.js 搭建 WebSocket 服务器,首先在 Express.js 中初始化一个 HTTP 服务器,并将其传递给 WebSocket-Node 来启用 WebSocket:

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

-- --------- ---
----- -------- - --- -----------------
  ----------- -----------
  ---------------------- -----
---
展开代码

在上面的代码中,我们初始化了一个 Express.js 应用程序,并创建了一个 HTTP 服务器。然后,我们使用 WebSocketServer 类来创建 WebSocket 服务器,通过将 HTTP 服务器传递给其构造函数来启用 WebSocket。此外,您可以选择在服务器上接受或拒绝连接请求。在本实例中,我们选择拒绝所有连接请求,并在需要时手动接受它们。

处理 WebSocket 连接请求

在 WebSocket 服务器初始化后,我们需要实现 WebSocket 连接处理程序来处理客户端的连接请求:

-- -------------------- ---- -------
---------------------- ------- -- -
  ----- ---------- - -------------------- ----------------
  ------------------------ ------- -- -
    -- ------------- --- ------- -
      --------------------- -------- ----------------------
      -- --------
    -
  ---
  ---------------------- ------------ ------------ -- -
    ----------------------- ------- ------------- - -----------------
    -- --------
  ---
---
展开代码

在上面的代码中,我们使用 WebSocketServer 实例的 request 事件监听器处理 WebSocket 连接请求。当从客户端收到连接请求时,我们将调用 accept() 方法来接受连接,并将其添加到连接列表中。接下来,我们将监听 connection 对象上的 message 事件,以接收客户端发送的数据。处理完数据后,我们可以使用 coonection 对象的 send() 方法来向客户端发送响应。最后,我们还将监听 connection 对象的 close 事件,以处理当连接关闭时的事件。

客户端代码

在客户端,我们可以使用 WebSocket API 来创建一个 WebSocket 连接,并向服务器发送数据:

-- -------------------- ---- -------
----- ------ - --- ---------------------------------
------------- - -- -- -
  ------------------------------
  ------------------ -------------
--
---------------- - ----- -- -
  --------------------- -------- ----------------
--
-------------- - -- -- -
  ------------------------------
--
展开代码

在上面的代码中,我们使用新的 WebSocket 实例来创建一个连接,并监听其 open、message、和 close 事件,以处理与服务器的交互。

总结

本文介绍了如何在 Express.js 中使用 WebSocket 实现实时通讯系统,并深入介绍了 WebSocket 的工作原理。我们使用了第三方 WebSocket 库 WebSocket-Node,在 Express.js 中启用 WebSocket,处理 WebSocket 连接请求以及客户端代码的编写。使用 WebSocket 技术,可以轻松实现低延迟,高效率的实时数据传输,为 Web 应用程序增添更多的功能。

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

纠错
反馈

纠错反馈