如何在 Express.js 应用程序中使用 WebSocket 实现即时通信

前言

随着互联网的不断发展,现在越来越多的应用需要实时通信。传统的 HTTP 协议,所采用的请求-响应模型,不再满足实时通信的需求。而 WebSocket 作为一种全双工通信协议,可以很好地满足实时通信的需求。本文将介绍如何在 Express.js 应用程序中使用 WebSocket 实现即时通信。

创建 Express 项目

在开始之前,我们需要先安装 Node.js 和 Express。如果您已经安装了 Node.js,可以使用以下命令安装 Express:

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

安装完成之后,可以使用以下命令创建一个新的 Express 项目:

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

创建完成后,切换到 myapp 目录,并安装依赖:

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

启动应用程序:

- --- -----

在浏览器中访问 http://localhost:3000/,应该能看到 Express 的欢迎页面。

添加 WebSocket 支持

在创建完 Express 项目之后,我们需要添加 WebSocket 支持。可以使用 ws 模块来实现。具体来说,我们需要完成以下几个步骤:

  1. 安装 ws 模块:

    - --- ------- ------ --
  2. 在 Express 项目中引入 ws 模块:

    --- --------- - --------------
  3. 创建 WebSocket 服务器:

    --- --- - --- ------------------ ----- ---- ---
  4. 监听 WebSocket 连接:

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

    这段代码中,ws 参数代表连接上来的 WebSocket 对象。

  5. 发送消息:

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

完整的代码如下所示:

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

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

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

示例

现在我们已经可以使用 WebSocket 在 Express.js 应用程序中实现即时通信了。下面是一个完整的示例:

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

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

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

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

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

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

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

这段代码将创建一个静态文件服务器,并在 ws 对象上监听 WebSocket 连接。在收到消息之后,会将消息原样返回给客户端。

结论

WebSocket 是一种非常方便的实时通信协议,可以很好地满足需求。在 Express.js 应用程序中使用 WebSocket 实现即时通信,可以方便地与其他 Node.js 模块集成。

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