使用 Node.js 和 Express.js 实现基于 WebSocket 的即时通讯

阅读时长 7 分钟读完

引言

随着科技的不断发展,人们越来越注重实时通讯的重要性。而且,现代 Web 应用程序需要在用户与应用程序之间进行实时数据交换。在过去,这种交互是通过使用轮询和长轮询实现的。这些方法的主要问题是它们对服务器和网络带宽造成了很大的压力。现在,基于 WebSocket 技术的即时通讯已经成为了一个更普遍的解决办法。

在本文中,我们将介绍如何使用 Node.js 和 Express.js 实现基于 WebSocket 的即时通讯。我们将涉及的主要主题包括:

  • WebSocket 协议的介绍
  • 基于 Express.js 和 ws 库的 WebSocket 服务器
  • 实现一个简单的聊天程序示例

什么是 WebSocket 协议

WebSocket 是基于 HTTP 协议设计而成的一种实时的、双向的通讯协议。它是在客户端和服务器之间建立一条持久连接,使得双方可以随时发送数据,而不必担心网络带宽的限制。而且,WebSocket 协议使得服务器可以向客户端推送数据,这种机制在实时通讯和实时监测方面非常有用。

在 WebSocket 协议中的通讯过程类似于下图:

WebSocket 连接建立后,服务器和客户端都可以发送信息。当一个端点发送消息时,它会将它封装在帧中并将其发送出去。接收者将解析这个帧并采取适当的行动。服务器和客户端之间的数据传输可以以文本或二进制形式进行。

基于 Express.js 和 ws 库的 WebSocket 服务器

Node.js 为开发者提供了一种快速、可靠地搭建 WebSocket 服务器的方式。在本文中,我们将使用 ws 库来实现 WebSocket 服务器,而该库依赖于 Node.js 和 Express.js。

安装所需的库

要使用 ws 库,您需要在项目中安装它,可以使用 npm 包管理器快速实现:

创建基于 Express.js 的 WebSocket 服务器

下面是如何创建一个简单的基于 Express.js 的 WebSocket 服务器:

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

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

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

在上述代码中,我们使用 Express.js 创建了一个 HTTP 服务器,然后创建了一个基于 WebSocket 的服务器实例,并将其附加到我们的 HTTP 服务器上。最后,我们在服务器上监听端口 3000,并对新的 WebSocket 连接和消息进行处理。

实现一个简单的聊天程序示例

让我们来创建一个简单的聊天室。每个客户端都可以向服务器发送消息,并将该消息广播到所有已连接客户端。

服务端代码

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

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

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

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

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

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

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

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

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

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

在上述代码中,我们首先定义了一个空的客户端数组,每次连接时将客户端添加到该数组中。接着,我们监听 'message' 事件,在收到消息后向其他客户端广播该消息。最后,当客户端断开连接时,我们从客户端数组中删除该客户端。

客户端代码

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

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

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

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

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

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

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

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

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

-------

上述代码很简单,用于呈现用户界面并监听表单提交事件。当表单被提交时,它将发送消息到 WebSocket 服务器。并且,它还放置消息到待接受消息列表的后面(大家可以看到一个连接页面,并进行输入、发送消息等操作)。

总结

在本篇文章中,我们介绍了 WebSocket 协议及其实时通讯优点,并且使用 Node.js 和 Express.js 实现基于 WebSocket 的即时通讯,并举了一个聊天程序的例子来展示 WebSocket 的使用。WebSocket 不仅适用于聊天和在线游戏应用程序,还适用于与客户端进行实时通信的大多数现代应用程序。希望这篇文章能有所帮助,使前端工程师可以更好地理解和使用 WebSocket。

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

纠错
反馈