Crates.io | chord-dht |
lib.rs | chord-dht |
version | 0.1.0 |
source | src |
created_at | 2022-04-27 21:45:11.450418 |
updated_at | 2022-04-27 21:45:11.450418 |
description | A DHT implementation in Rust based on Chord with high peformance and data replication. |
homepage | |
repository | https://github.com/DCsunset/chord-dht |
max_upload_size | |
id | 576304 |
size | 109,174 |
A DHT (distributed hash table) implementation in Rust based on Chord with high peformance and data replication.
It can be used either as a library or as a standalone application.
As a client:
use chord_dht::client::setup_client;
use tarpc::context;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// server address
let addr = "127.0.0.1:9800"
let client = setup_client(&addr).await?;
let ctx = context::current();
let key = "key".as_bytes();
let value = "value".as_bytes();
client.set_rpc(ctx, key.clone(), Some(value.clone())).await?;
let ret = client.get_rpc(ctx, key.clone()).await?;
assert_eq!(ret.unwrap(), value);
Ok(())
}
As a server:
use chord_dht::core::{
Node,
NodeServer,
config::Config
};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let node = Node {
addr: "127.0.0.1:9800".to_string(),
id: 0
};
let mut server = NodeServer::new(node, Config::default());
let manager = server.start(None).await?;
// Wait for the server
manager.wait().await?;
Ok(())
}
To start a server:
cargo run -- chord-dht-server <bind_addr> [--join <addr>]
To start a client:
cargo run -- chord-dht-client <server_addr>
> set key value
> get key
value
The in-memory key-value DHT is aimed to be efficient when storing ephemeral data (e.g. user tokens).
Transfer existing keys when node is down or joins the ring
Allow node to leave
Licensed under the AGPLv3 license.