# @dashersw/node-discover 中文文档

规范地址：https://npmcn.com/package/%40dashersw/node-discover/

版本：1\.0\.6
npm 元数据更新时间：2024-06-13T02:23:08.451Z
中文译文更新时间：2026-11-11T12:30:05.036Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40dashersw/node-discover
原文对照：https://npmcn.com/package/%40dashersw/node-discover/?lang=original
项目主页：http://github.com/wankdanker/node-discover
源码仓库：https://github.com/wankdanker/node-discover

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：50.4 kB，21 个文件
- TypeScript 类型：未声明
- Node.js 要求：\>=0\.4\.1 \<0\.5\.0 \|\| \>=0\.6\.9
- 运行依赖：2 个
- 首次发布：2017-07-08T20:24:34.271Z
- 最新版本发布：2024-06-13T02:23:08.250Z
- 近 30 天下载量：6771（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：10（近 12 个月 0 个）

## 中文简介

自动发现您的节点实例, 内置支持自动单一主机和功能广告 .

## 安装

```sh
npm install @dashersw/node-discover
```

也可以使用：`pnpm add @dashersw/node-discover`、`yarn add @dashersw/node-discover`、`bun add @dashersw/node-discover`

## README

# 节点发现

[![npm version](https://badge.fury.io/js/node-discover.svg)](https://www.npmjs.com/package/node-discover)

自动和分散地发现和监测节点实例 用于支持数量不等的主流程、服务广告 和频道消息.

# 为什么?

所以,你有一大堆节点 进程运行,但你没有办法进入 每一个过程,以确定其他过程在哪里或者它们能做什么. 这个模块旨在使发现新的过程尽可能简单. 此外,如果你想由一个进程来负责一组 过程? 本模块还设有自动主流程选择.

# 兼容性

本模块使用从节点的dgram模块中播放和多播功能. 全体 dgram 模块的必要特性在以下节点版本中实现

```
- v0.4.x
- v0.6.9+
```

# 示例

请在示例文件夹中查看,特别是 [分发活动 发射器](https://github.com/wankdanker/node-discover/blob/master/examples/deventemitter.js)

```js
var Discover = require('node-discover');

var d = Discover();

d.on("promotion", function () {
    /* 
        * Launch things this master process should do.
        * 
        * For example:
        *	- Monitior your redis servers and handle failover by issuing slaveof
        *    commands then notify other node instances to use the new master
        *	- Make sure there are a certain number of nodes in the cluster and 
        *    launch new ones if there are not enough
        *	- whatever
        * 
        */
        
    console.log("I was promoted to a master.");
});

d.on("demotion", function () {
    /*
        * End all master specific functions or whatever you might like. 
        *
        */
    
    console.log("I was demoted from being a master.");
});

d.on("added", function (obj) {
    console.log("A new node has been added.");
});

d.on("removed", function (obj) {
    console.log("A node has been removed.");
});

d.on("master", function (obj) {
    /*
        * A new master process has been selected
        * 
        * Things we might want to do:
        * 	- Review what the new master is advertising use its services
        *	- Kill all connections to the old master
        */
        
    console.log("A new master is in control");
});
```

# 安装

### 无

```shell
npm install node-discover
```

### gi

```shell
git clone git://github.com/wankdanker/node-discover.git
```

# API 密码

## 构造器

```js
Discover(opts, callback)
```

-   选择 - 对象
    -   **你好 中间** : 以毫秒的速度播放一个问候包的次数
        -   默认: 1000
    -   **检查Interval** : 检查缺失节点的次数, 以毫秒计
        -   默认: 2000
    -   **节点超时** : 如果在这多毫秒内没有看到, 就当一个节点死了
        -   默认: 2000
    -   **主超时** : 如果在这多毫秒内没有看到, 就当一个主节点死了
        -   默认: 2000
    -   **地址** : 要绑定的地址
        -   默认: '0.0.0.0'
    -   **端口** : 与其他发现节点的进程绑定和通信的端口
        -   默认: 12345
    -   **广播** : 使用广播的广播地址
        -   默认: '255.255.255.255'
    -   **多媒体** : 使用多播的多播地址
        -   默认: 无效( 不使用多播, 使用广播)
    -   **木卫一TTL** : 使用多播时的多播 TTL
        -   默认:1
    -   **独播** : 逗号分隔了已知节点的Unicast地址的字符串或矩阵
        -   建议具体说明 `address` 本地界面,使用 unicast 并期望本地发现工作
    -   **键** : 加密密钥, 如果您的广播包应该加密
        -   默认: 无效( 这意味着没有加密)
    -   **需要的大师** : 应始终可用的主进程数
    -   **重量** : 用于确定偏好特定进程成为主进程的数字
        -   默认值: 发现. ight ()
        -   高数取胜.
    -   **客户端** : 当真实仅在客户端模式下运行时( 不要播放节点的存在, 只要聆听并发现)
        -   默认: 错
    -   **复用添加器** :允许同一主机上的多个进程绑定在同一地址和端口上.
        -   默认: 真
        -   仅适用于节点 v0.12+
    -   **忽略进程** : 如果设置为错误, 将不会忽略同一进程内( 在非保留频道) 其它发现事件的信息, 加入( ) 将会收到它们 .
        -   默认: 真
    -   **忽略内存** : 如果设置为虚假, 将不会忽略来自自己( 在非保留频道) 的信息, 加入( ) 将会收到它们 .
        -   默认: 真
    -   **广告** : 初始广告对象, 随每个你好包一起发送 .
    -   **主机名** : 以自定义值覆盖OS主机名.
        -   默认: 无效( 使用 DISCVERY HOSTNAME env var 或 OS 主机名)
-   调回 - 函数, 当一切都在运行时调用
    -   签名 : 回调( err, 成功)

## 属性

-   节点

## 方法

### 促销( )

升举为主.

这导致老主人降级.

```js
var Discover = require('node-discover');
var d = Discover();

d.promote();
```

### 降级( 常设: 假)

免去这个例子的主人。 可选通过正则降级指定此选项 节点不应该自动再次成为主.

这导致另一个节点成为主人

```js
var Discover = require('node-discover');
var d = Discover();

d.demote(); //this node is still eligible to become a master node.

//or

d.demote(true); //this node is no longer eligible to become a master node.
```

### 加入( 频道, 回信)

加入接收信件/对象的频道

```js
var Discover = require('node-discover');
var d = Discover();

//Pass the channel and the callback function for handling received data from that channel
var success = d.join("config-updates", function (data) {
    if (data.redisMaster) {
        //connect to the new redis master
    }
});

if (!success) {
    //could not join that channel; probably because it is reserved
}
```

#### 保留渠道

-   晋升
-   降职
-   已添加
-   删除
-   师傅
-   哈啰

### 休假(频道)

离开频道

```js
var Discover = require('node-discover');
var d = Discover();

//Pass the channel which we want to leave
var success = d.leave("config-updates");

if (!success) {
    //could leave channel; who cares?
}
```

### 发送( 频道、 对象 ToSend)

在指定信道上发送信件/对象

```js
var Discover = require('node-discover');
var d = Discover();

var success = d.send("config-updates", { redisMaster : "10.0.1.4" });

if (!succes) {
    //could not send on that channel; probably because it is reserved
}
```

### 广告(ObjectToAdvertise)

用每个你好包广告一个对象或消息;这完全是任意的。 做这个 对象/消息,任何适用于应用程序的内容,只要您希望您的节点知道其他内容 节点.

```js
var Discover = require('node-discover');
var d = Discover();

d.advertise({
    localServices : [
        { type : 'http', port : '9911', description : 'my awesome http server' },
        { type : 'smtp', port : '25', description : 'smtp server' },
    ]
});

//or

d.advertise("i love nodejs");

//or

d.advertise({ something : "something" });
```

### 开始( c)

开始播放 Hello 数据包并检查缺失的节点( 启动在构建器中自动调用)

```js
var Discover = require('node-discover');
var d = Discover();

d.start();
```

### 停止( )

停止播放 Hello 包和检查缺失的节点

```js
var Discover = require('node-discover');
var d = Discover();

d.stop();
```

### 每个节点( fn)

对于每个节点执行 fn,通过 fn 的节点 fn(节点)

```js
var Discover = require('node-discover');
var d = Discover();

d.eachNode(function (node) {
    if (node.advertisement == "i love nodejs") {
        console.log("nodejs loves this node too");
    }
});
```

## 活动

每次活动都会通过 `Node Object` 事情正在发生.

### 晋升

当节点被提升为大师时被触发.

-   可能通过调用促销()方法实现
-   可能发生于当前主实例被降级并自动被提升
-   可能发生于当前主例死亡和此例自动被推广

### 降职

节点不再为主时被触发.

-   可能通过调用降级方法实现
-   可能由另一个节点 推动自己掌握

### 已添加

发现新节点时触发

### 删除

当新节点没有从内部听到时触发 `nodeTimeout`

### 师傅

选中新主机时触发

### 你好,收到吗

当节点收到给定的问候时触发

### 你好,确认

当节点发出一个问候包时触发

## 节点对象

```js
{ 
    isMaster: true,
    isMasterEligible: true,
    advertisement: null,
    lastSeen: 1317323922551,
    address: '10.0.0.1',
    port: 12345,
    id: '31d39c91d4dfd7cdaa56738de8240bc4',
    hostName : 'myMachine'
}
```

# 开始

我还没有测试大包。 当前版本不处理重组 分隔消息.

# 自由主义

(麻省理工学院执照)

版权 (c) 2011 Dan VerWeire [dverweire@gmail.com (英语)](mailto:dverweire@gmail.com)

特此免费准许任何人获得《公约》副本 此软件和相关文档文件( “软件” ), 用于处理 软件不受限制,包括不受限制 使用、复制、修改、合并、出版、分发、分许可证和/或出售 软件,并允许获得软件的人这样做, 符合下列条件:

上述版权通知和这项许可通知应载入所有 软件的复制件或大部分.

软件是提供的"AS IS", 没有任何的恐惧, EXPRESS OR 包括但不限制于雇佣军的保障 特别是目的和非目的。 永远也不要 A. 任何索赔、索赔或其他负债,不论是否属于 一、条约、条约或其他条约、条约或条约 与软件的关系或使用软件或其他交易.

## 常见问题

### @dashersw/node-discover 是什么？

自动发现您的节点实例, 内置支持自动单一主机和功能广告 \.

### 如何安装 @dashersw/node-discover？

在项目目录运行 npm install @dashersw/node-discover，或使用 pnpm add / yarn add / bun add。

### @dashersw/node-discover 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/dashersw\_\_node-discover 是否存在。

### @dashersw/node-discover 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=0\.4\.1 \<0\.5\.0 \|\| \>=0\.6\.9。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @dashersw/node-discover 可以商用吗？

@dashersw/node-discover 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @dashersw/node-discover 的下载量有多少？

根据 npm 官方下载统计，@dashersw/node-discover 在 2026/10/12 – 2026/11/10 这 30 天内被下载 6,771 次，日均约 226 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @dashersw/node-discover 还在维护吗？

最新版本 1\.0\.6 发布于 2024/06/13（2 年前）；至今共发布 10 个版本，其中过去 12 个月发布了 0 个；首次发布于 2017/07/09。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

