Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/savoirfairelinux/opendht
OpenDHT: a C++17 Distributed Hash Table implementation
https://github.com/savoirfairelinux/opendht
Last synced: 29 days ago
JSON representation
OpenDHT: a C++17 Distributed Hash Table implementation
- Host: GitHub
- URL: https://github.com/savoirfairelinux/opendht
- Owner: savoirfairelinux
- License: gpl-3.0
- Created: 2014-12-17T19:05:22.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2024-09-19T16:48:36.000Z (about 2 months ago)
- Last Synced: 2024-10-02T01:23:45.725Z (about 1 month ago)
- Language: C++
- Homepage:
- Size: 6.24 MB
- Stars: 1,022
- Watchers: 61
- Forks: 172
- Open Issues: 69
-
Metadata Files:
- Readme: README.md
- License: COPYING
Awesome Lists containing this project
README
OpenDHTA lightweight C++17 Distributed Hash Table implementation.
OpenDHT provides an easy to use distributed in-memory data store.
Every node in the network can read and write values to the store.
Values are distributed over the network, with redundancy.* Lightweight and scalable, designed for large networks and small devices
* High resilience to network disruption
* Public key cryptography layer providing optional data signature and encryption (using GnuTLS)
* IPv4 and IPv6 support
* Clean and powerful **C++17** map API
* Bindings for **C, Rust & Python 3**
* REST API with optional HTTP client+server with push notification support## Documentation
See the wiki:#### How to run a node
You can help contributing to the public network by running a stable node with a public IP address.
https://github.com/savoirfairelinux/opendht/wiki/Running-a-node-with-dhtnode#### How-to build and install
Build instructions:
## Examples
### C++ example
The `tools` directory includes simple example programs :
* `dhtnode`, a command line tool, allowing to run a DHT node and perform operations supported by the library (get, put etc.) with text values.
* `dhtchat`, a very simple IM client working over the dht.Example program launching a DHT node, connecting to the network and performing some basic operations:
```c++
#include
#includeint main()
{
dht::DhtRunner node;// Launch a dht node on a new thread, using a
// generated RSA key pair, and listen on port 4222.
node.run(4222, dht::crypto::generateIdentity(), true);// Join the network through any running node,
// here using a known bootstrap node.
node.bootstrap("bootstrap.jami.net", "4222");// put some data on the dht
std::vector some_data(5, 10);
node.put("unique_key", some_data);// put some data on the dht, signed with our generated private key
node.putSigned("unique_key_42", some_data);// get data from the dht
node.get("other_unique_key", [](const std::vector>& values) {
// Callback called when values are found
for (const auto& value : values)
std::cout << "Found value: " << *value << std::endl;
return true; // return false to stop the search
});// wait for dht threads to end
node.join();
return 0;
}
```
### Python 3 example
```python
import opendht as dhtnode = dht.DhtRunner()
node.run()# Join the network through any running node,
# here using a known bootstrap node.
node.bootstrap("bootstrap.jami.net", "4222")# blocking call (provide callback arguments to make the call non-blocking)
node.put(dht.InfoHash.get("unique_key"), dht.Value(b'some binary data'))results = node.get(dht.InfoHash.get("unique_key"))
for r in results:
print(r)
```## Dependencies
- msgpack-c 1.2+, used for data serialization.
- GnuTLS 3.3+, used for cryptographic operations.
- Nettle 2.4+, a GnuTLS dependency for crypto.
- {fmt} 9.0+, for log formatting.
- (optional) restinio used for the REST API.
- (optional) llhttp used for the REST API.
- (optional) jsoncpp 1.7.4-3+, used for the REST API.
- Build tested with GCC 7+ (GNU/Linux, Windows with MinGW), Clang/LLVM (GNU/Linux, Android, macOS, iOS).
- Build tested with Microsoft Visual Studio 2019, 2022## Contact
IRC: join us on Libera.chat at [`#opendht`](https://web.libera.chat/#opendht).
## License
Copyright (C) 2014-2023 Savoir-faire Linux Inc.OpenDHT is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
See COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html for the full GPLv3 license.
## Acknowledgements
This project was originally based on https://github.com/jech/dht by Juliusz Chroboczek.
It is independent from another project called OpenDHT (Sean Rhea. Ph.D. Thesis, 2005), now extinct.