Discovery peers in a distributed system using regular dns and multicast dns.
npm install dns-discovery
var discovery =var disc1 =var disc2 =disc1// announce an appdisc2
var disc = discovery([options])
Create a new discovery instance. Options include:
server: 'discovery.example.com:9090' // put a centralized dns discovery server herettl: someSeconds // ttl for records in seconds. defaults to Infinity.limit: someLimit // max number of records stored. defaults to 10000.multicast: true // use multicast-dns. defaults to true.domain: 'my-domain.com' // top-level domain to use for records. defaults to dns-discovery.localsocket: someUdpSocket // use this udp socket as the client socketloopback: false // discover yourself over multicast
If you have more than one discovery server you can specify an array
Do a lookup for a specific app name. When new peers are discovered for this name peer events will be emitted
disc.announce(name, port, [options], [callback])
Announce a new port for a specific app name. Announce also does a lookup so you don't need to do that afterwards.
If you want to specify a public port (a port that is reachable from outside your firewall) you can set the
option. This will announce the public port to your list of dns servers and use the other port over multicast.
You can also set
impliedPort: true to announce the public port of the dns socket to the list of dns servers.
disc.unannounce(name, port, [options], [callback])
Stop announcing a port for an app. Has the same options as .announce
Listen for dns records on a specific port. You only need to call this if you want to turn your peer into a discovery server that other peers can use to store peer objects on.
var server =server
You can setup a discovery server to announce records on the internet as multicast-dns only works on a local network.
The port defaults to
53 which is the standard dns port. Additionally it tries to bind to
5300 to support networks that filter dns traffic.
Destroy the discovery instance. Will destroy the underlying udp socket as well.
There is a cli tool available as well
npm install -g dns-discoverydns-discovery help
To announce a service do
# will announce test-app over multicast-dnsdns-discovery announce test-app --port=8080
To look it up
# will print services when they are founddns-discovery lookup test-app
To run a discovery server
# listen for services and store them with a ttl of 30sdns-discovery listen --port=9090 --ttl=30
And to announce to that discovery server (and over multicast-dns)
# replace example.com with the host of the server running the discovery serverdns-discovery announce test-app --server=example.com:9090 --port=9090
And finally to lookup using that discovery server (and multicast-dns)
dns-discovery lookup test-app --server=example.com:9090
You can use any other dns client to resolve the records as well. For example using
# dig requires the discovery server to run on port 53dig @discovery.example.com test-app SRV