节点发现
自动和分散地发现和监测节点实例 用于支持数量不等的主流程、服务广告 和频道消息.
为什么?
所以,你有一大堆节点 进程运行,但你没有办法进入 每一个过程,以确定其他过程在哪里或者它们能做什么. 这个模块旨在使发现新的过程尽可能简单. 此外,如果你想由一个进程来负责一组 过程? 本模块还设有自动主流程选择.
兼容性
本模块使用从节点的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. 任何索赔、索赔或其他负债,不论是否属于 一、条约、条约或其他条约、条约或条约 与软件的关系或使用软件或其他交易.