npm 包 node-discover 使用教程

阅读时长 10 分钟读完

前言

在使用分布式应用程序时,节点发现是一个重要的环节。Node.js 生态系统在这方面也有很好的支持,其中一个非常优秀的 Node.js 模块就是 node-discover。这个模块使得开发者可以在不同的节点之间进行广播和发现,从而构建一个完整的分布式系统。

本文将会介绍 node-discover 的使用方法,并提供一些示例代码来辅助大家更好的理解。

安装和引入参数

首先需要安装 node-discover

在代码中引入:

创建实例

node-discover 库通过创建一个 Discover 实例来操作节点发现。创建 Discover 实例时,需要指定一些参数:

参数讲解

  • key (必填):该参数为节点发现的唯一识别符号,节点发现需要使用该参数来连接所有同名的节点。
  • udp (可选):默认情况下,node-discover 基于 UDP 发送和接收广播。如果你不希望使用 UDP,可以把该参数置为 false。
  • reconnect (可选):如果该参数为 true,节点会在与某个节点断开连接后重新连接到该节点。

发送广播

当节点被创建时,它并不知道其他节点的存在。所以我们需要使用广播来通知其他节点我们的存在。如下:

当其他节点接收到我们的广播时,可以响应我们的广播:

其中,obj 表示广播的消息体,rinfo 表示发出广播的节点信息。

发现一个同名节点

我们现在需要发现一个已知名称的节点:

假设另一个进程在同一个局域网中运行,并使用了相同的“myapp”键创建了一个查找实例后,该实例将会被添加到我们的本地查找网络中。

关于节点的信息

每个节点都是由一个“键-值对”组成。节点的示例如下:

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

其中的 data 部分可以包含你想要使用的任何键-值数据。例如,可以在一个 Node.js 应用程序中使用以下代码来设置信息:

关于数据存储

node-discover 会为你自动存储节点数据。保存的数据可以在程序中作为普通的 JavaScript 对象进行访问:

如果您的节点需要更新节点信息,请使用以下示例代码:

实际应用

接下来我们来演示使用 node-discover 库实现一个简单的聊天室。

服务器端代码

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

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

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

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

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

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

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

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

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

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

客户端代码

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

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

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

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

使用 node-discover 库,我们已经成功地创建了一个分布式的聊天室应用程序。当用户打开聊天室页面时,他们将被加入查找网络,当他们发送消息时,消息将被广播到其他节点。每个节点都能够监听所有消息,从而成功地构建了一个分布式应用程序。

总结

本文介绍了 node-discover 库的使用方法,并提供了实例代码和基于 Node.js 的聊天室示例程序。通过学习这些内容,希望读者们能够更好地理解和掌握 node-discover 的使用方法,并在实际项目中运用它来实现更加稳定和可靠的分布式系统。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/the-node-discover