Node.js 中使用 WebSocket 和 Socket.io 进行即时通讯的实现

阅读时长 12 分钟读完

随着互联网的发展和普及,越来越多的应用程序需要实现实时通讯功能,WebSocket 和 Socket.io 是两种最流行的实现方式。本文将介绍 Node.js 中使用 WebSocket 和 Socket.io 来实现即时通讯的方法,包括基本概念、使用方法,以及示例代码。希望能帮助读者了解并掌握该技术。

WebSocket 简介

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它通过在浏览器和服务器之间建立一个持久的连接,提供了一种实现实时通讯的方法。WebSocket 协议支持双向通信,允许服务器主动向客户端推送数据,而不需要客户端先发起请求。WebSocket 通信过程如下图所示:

如上图所示,WebSocket 通信的过程分为三个步骤,分别是“握手”、“数据传输”和“关闭连接”。

如何使用 WebSocket

在 Node.js 中,我们可以使用 websocket 模块来实现 WebSocket 通信。具体使用方法如下:

安装 WebSocket 模块

使用 npm 安装 WebSocket 模块:

创建 WebSocket 服务器

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

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

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

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

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

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

上述代码创建了一个 WebSocket 服务器在本地的 3000 端口,当客户端连接到该服务器时,会触发 request 事件,并创建一个 WebSocket 连接对象。该连接对象可以通过 connection 参数来访问,使用 on 方法可以监听连接的消息和事件,例如接收消息时的 message 事件,以及关闭连接时的 close 事件。

创建 WebSocket 客户端

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

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

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

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

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

上述代码创建了一个 WebSocket 客户端通过 client 对象,连接到本地的 3000 端口的 WebSocket 服务器。当成功连接到服务器时,会触发 connect 事件,通过 connection 参数可以访问到连接对象,使用 on 方法可以监听连接的消息和事件,例如接收消息时的 message 事件,以及关闭连接时的 close 事件。

Socket.io 简介

Socket.io 是一个实现 WebSocket 通信的库,它支持多个浏览器和设备之间的实时通讯,并提供了可靠的传输通道,以及不同的实现方式。Socket.io 可以在 Node.js 中使用,也可以在浏览器中使用。

如何使用 Socket.io

在 Node.js 中,我们可以使用 socket.io 模块来实现 Socket.io 通信。具体使用方法如下:

安装 Socket.io 模块

使用 npm 安装 Socket.io 模块:

创建 Socket.io 服务器

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

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

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

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

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

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

上述代码创建了一个 Socket.io 服务器在本地的 3000 端口,当客户端连接到该服务器时,会触发 connection 事件,并创建一个 Socket 连接对象。该连接对象可以通过socket参数来访问,使用on方法可以监听连接的消息和事件,例如接收消息时的 chat message 事件,以及关闭连接时的 disconnect 事件。

创建 Socket.io 客户端

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

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

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

上述代码创建了一个 Socket.io 客户端通过 socket 对象,连接到本地的 3000 端口的 Socket.io 服务器。当成功连接到服务器时,可以通过 emit 方法发送消息,使用 on 方法可以监听消息和事件,例如接收消息时的 chat message 事件。

示例代码

基于上述介绍,以下是一个完整的可以实现即时通讯的基于 Socket.io 的聊天室示例代码。

服务器代码

server.js 文件:

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

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

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

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

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

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

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

index.html 文件:

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

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

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

该示例代码可以通过以下命令启动:

在浏览器中访问 http://localhost:3000/,即可启动一个聊天室,可以向其他连接到该聊天室的用户发送消息。

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

纠错
反馈

纠错反馈