Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nikhilm/kademlia
DHT implementation
https://github.com/nikhilm/kademlia
Last synced: about 1 month ago
JSON representation
DHT implementation
- Host: GitHub
- URL: https://github.com/nikhilm/kademlia
- Owner: nikhilm
- License: mit
- Created: 2011-12-28T10:56:09.000Z (almost 13 years ago)
- Default Branch: master
- Last Pushed: 2019-04-26T15:07:45.000Z (over 5 years ago)
- Last Synced: 2024-10-30T16:40:20.315Z (about 1 month ago)
- Language: JavaScript
- Homepage:
- Size: 196 KB
- Stars: 142
- Watchers: 7
- Forks: 26
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-peer-to-peer - kademlia
- awesome-peer-to-peer - kademlia
README
Kademlia
==========A Kademlia DHT implementation in node, ready to be used as
a distributed data store.Install using `npm install kademlia`
Use:
var dht = require('kademlia')
var node = new dht.KNode({ address: 'IP address', port: portNumber });
node.connect('existing peer ip', port);
node.set('foo', 'bar');node.get('foo', function(err, data) {
console.log("Retrieved", data, "from DHT");
console.log(data == 'bar');
});API
---### KNode
The KNode represents a Kademlia node and handles all communication and storage.
This should be the only thing you need to interact with the Kademlia overlay
network.#### KNode(configuration)
A KNode is created by passing it an object having `address` and `port`
properties. The node will bind to `port` and start running.var node = new dht.KNode({ address: '10.100.98.60', port: 12345 });
#### connect(address, port[, callback])
Used to introduce this Kademlia node to the overlay network. If you know the
address and port of an existing Kademlia peer, you may `connect` to it so that
this node can become part of the network. If `callback` is passed it is called
with the result of the join. `connect` _succeeds_ (`err` is `null`) when the
entire [Kademlia join
sequence](http://xlattice.sourceforge.net/components/protocol/kademlia/specs.html#join)
is finished.node.connect('10.100.98.12', 42922, function(err) {
if (err)
process.exit();
startHeavyLifting();
});#### get(key, callback)
Gets the value associated with `key` from the Kademlia network. `callback` is
a function with arguments `(err, value)`. If the value is found, `err` is
`null`, otherwise `err` will be an object containing information about what
went wrong and `value` will be `null`.node.get('foo', function(err, value) {
if (err) {
// something went wrong
return;
}// use value
});#### set(key, value[, callback])
Store the `key`, `value` pair in the Kademlia network. `set()` is not
guaranteed to succeed. `callback` can be used to check the result of the store.
It is `function (err)`. If the store succeeded, `err` is `null`, otherwise
`err` describes what went wrong.node.set('foo', 'bar', function(err) {
if (err) {
// might want to try again
}
});#### self
An object describing this node. `self` is frozen, attempts to modify it will
fail (and raise an exception in strict mode).node.self is {
nodeID: 'f386f180b2722ab92060661152e680b88976126f',
address: '10.100.98.60',
port: 12345
}Hacking
-------To use the test scripts, assign the IP address to bind to, to the environment
variable `KADEMLIA_BIND_ADDRESS`.Contributors
------------Maintainer: Nikhil Marathe
Contributors: https://github.com/nikhilm/kademlia/contributorsLicense
-------Kademlia is distributed under the MIT License.