@dashersw/node-discover

中文文档
1.0.6发布于 2024/06/13MIT近 30 天下载 6771

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

中文使用文档
文档目录23 节
  1. 无
  2. gi
  3. 构造器
  4. 属性
  5. 方法
  6. 促销( )
  7. 降级( 常设: 假)
  8. 加入( 频道, 回信)
  9. 休假(频道)
  10. 发送( 频道、 对象 ToSend)
  11. 广告(ObjectToAdvertise)
  12. 开始( c)
  13. 停止( )
  14. 每个节点( fn)
  15. 活动
  16. 晋升
  17. 降职
  18. 已添加
  19. 删除
  20. 师傅
  21. 你好,收到吗
  22. 你好,确认
  23. 节点对象

节点发现

npm version

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

为什么?

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

兼容性

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

- v0.4.x
- v0.6.9+

示例

请在示例文件夹中查看,特别是 分发活动 发射器

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");
});

安装

无

npm install node-discover

gi

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

API 密码

构造器

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, 成功)

属性

  • 节点

方法

促销( )

升举为主.

这导致老主人降级.

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

d.promote();

降级( 常设: 假)

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

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

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.

加入( 频道, 回信)

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

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
}

保留渠道

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

休假(频道)

离开频道

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)

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

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)

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

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 数据包并检查缺失的节点( 启动在构建器中自动调用)

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

d.start();

停止( )

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

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

d.stop();

每个节点( fn)

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

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

师傅

选中新主机时触发

你好,收到吗

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

你好,确认

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

节点对象

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

开始

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

自由主义

(麻省理工学院执照)

版权 (c) 2011 Dan VerWeire [email protected] (英语)

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

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

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

版本与发布记录

@dashersw/node-discover 共发布 10 个版本,首次发布于 2017/07/09;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.0.6latest2024/06/132 年前
1.0.52021/08/165 年前
1.0.42018/08/198 年前
1.0.32018/08/198 年前
0.8.22018/02/198 年前
0.8.12017/11/308 年前

关于 @dashersw/node-discover 的常见问题

@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 和提交记录判断。