Node.js 中如何使用 WebSocket 实现双向通信

介绍

WebSocket 是一种基于 TCP 协议的双向通信协议,它可以在浏览器和服务器之间建立一个持久化的连接,使得服务器可以主动向客户端发送消息,同时客户端也可以向服务器发送消息。Node.js 作为一种非常流行的服务器端 JavaScript 运行环境,提供了多种实现 WebSocket 的模块和库,使得在 Node.js 中实现 WebSocket 变得非常容易。

本文将介绍如何使用 Node.js 中的 WebSocket 模块实现双向通信,并提供示例代码和详细的解释。

安装

要使用 WebSocket,我们需要安装一个 WebSocket 模块。Node.js 中有多个实现 WebSocket 的模块可供选择,其中最流行的是 ws 模块。我们可以使用 npm 来安装 ws 模块:

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

示例代码

下面是一个简单的 WebSocket 服务器示例代码:

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

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

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

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

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

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

这段代码创建了一个 WebSocket 服务器,并监听端口号 8080。当客户端连接到服务器时,connection 事件将被触发,我们可以在这个事件处理函数中处理客户端的连接。当客户端发送消息时,message 事件将被触发,我们可以在这个事件处理函数中处理客户端发送的消息,并将消息回传给客户端。当客户端断开连接时,close 事件将被触发,我们可以在这个事件处理函数中处理客户端的断开连接。

下面是一个简单的 WebSocket 客户端示例代码:

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

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

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

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

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

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

这段代码创建了一个 WebSocket 客户端,并连接到服务器的端口号 8080。当连接建立后,open 事件将被触发,我们可以在这个事件处理函数中处理连接建立的逻辑。当客户端接收到服务器发送的消息时,message 事件将被触发,我们可以在这个事件处理函数中处理服务器发送的消息。当客户端断开连接时,close 事件将被触发,我们可以在这个事件处理函数中处理客户端的断开连接。

深度解释

创建 WebSocket 服务器

要创建一个 WebSocket 服务器,我们需要使用 ws 模块提供的 WebSocket.Server 类,代码如下:

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

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

我们可以将服务器监听的端口号传递给 WebSocket.Server 的构造函数,这里我们将端口号设置为 8080。创建服务器后,我们可以监听 connection 事件来处理客户端连接。

处理客户端连接

当客户端连接到 WebSocket 服务器时,connection 事件将被触发,我们可以在这个事件处理函数中处理客户端的连接,代码如下:

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

connection 事件的回调函数会接收一个 socket 参数,它代表了客户端和服务器之间的连接。我们可以在这个回调函数中处理客户端的连接逻辑。

处理客户端发送的消息

当客户端发送消息时,message 事件将被触发,我们可以在这个事件处理函数中处理客户端发送的消息,并将消息回传给客户端,代码如下:

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

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

message 事件的回调函数会接收一个 message 参数,它代表了客户端发送的消息。我们可以在这个回调函数中处理客户端发送的消息,并将消息回传给客户端。

处理客户端断开连接

当客户端断开连接时,close 事件将被触发,我们可以在这个事件处理函数中处理客户端的断开连接,代码如下:

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

close 事件的回调函数不接收任何参数,我们可以在这个回调函数中处理客户端断开连接的逻辑。

创建 WebSocket 客户端

要创建一个 WebSocket 客户端,我们需要使用 ws 模块提供的 WebSocket 类,代码如下:

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

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

我们可以将服务器的地址和端口号传递给 WebSocket 的构造函数,这里我们将地址设置为 ws://localhost:8080。创建客户端后,我们可以监听 open 事件来处理连接建立的逻辑。

处理连接建立

当连接建立后,open 事件将被触发,我们可以在这个事件处理函数中处理连接建立的逻辑,代码如下:

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

open 事件的回调函数不接收任何参数,我们可以在这个回调函数中处理连接建立的逻辑。

处理服务器发送的消息

当客户端接收到服务器发送的消息时,message 事件将被触发,我们可以在这个事件处理函数中处理服务器发送的消息,代码如下:

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

message 事件的回调函数会接收一个 message 参数,它代表了服务器发送的消息。我们可以在这个回调函数中处理服务器发送的消息。

处理客户端断开连接

当客户端断开连接时,close 事件将被触发,我们可以在这个事件处理函数中处理客户端的断开连接,代码如下:

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

close 事件的回调函数不接收任何参数,我们可以在这个回调函数中处理客户端断开连接的逻辑。

结论

WebSocket 是一种非常方便的双向通信协议,它可以在浏览器和服务器之间建立一个持久化的连接,从而实现双向通信。在 Node.js 中,我们可以使用 ws 模块提供的 WebSocket 实现来方便地创建 WebSocket 服务器和客户端,并实现双向通信。本文提供了一个简单的示例代码,并对代码进行了详细的解释,希望能对读者理解和使用 WebSocket 提供帮助。

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