14个版本

使用旧的Rust 2015

0.5.3 2017年5月14日
0.4.2 2017年3月26日
0.4.1 2016年4月20日
0.4.0 2015年6月27日

#5 in #kademlia

每月35次下载

GPL-2.0

66KB
2K SLoC

公告板DHT

Build Status Crates Version

https://github.com/manuels/bulletinboard-dht

简介

BulletinBoard是一个基于Kademlia的通用分布式哈希表。

接口通过以下命令提供作为D-Bus服务(见以下示例Python示例

Service: org.manuel.BulletinBoard
  Object Path: /
  Interface:   org.manuel.BulletinBoard
  Commands:
   - Store(app_id: str, key: [u8], value: [u8], lifetime_sec: u64)
   - Put(app_id: str, key: [u8], value: [u8])
   - Get(app_id: str, key: [u8]) -> (values: [[u8]])

请注意,值不得超过2048字节!

你在DHT中Put()的值的生命周期为15分钟,所以你应该每10分钟调用一次Put()以确保它保持在DHT中(或者只需使用Store())。

安装

  1. 下载

      # Debian/Ubuntu
      wget 'https://github.com/manuels/bulletinboard-dht/releases/download/v0.5.3/bulletinboard_0.5.3_amd64.deb'
    
      # Fedora
      wget 'https://github.com/manuels/bulletinboard-dht/releases/download/v0.5.3/bulletinboard-0.5.3-1.x86_64.rpm'
    
  2. 安装bulletinboard

      # Debian/Ubuntu
      sudo dpkg -i bulletinboard_0.5.3_amd64.deb
    
      # Fedora
      sudo rpm -ivh bulletinboard-0.5.3.x86_64.rpm
    

使用方法

通常BulletinBoard被第三方应用程序用于存储和查找数据。您可以通过DBus接口手动执行此操作,例如在您的shell脚本中。

存储数据

Put()命令将数据存储在DHT中。在这个例子中,我们使用应用程序IDmytestapp将值[8B,AD,F0,0D]存储在键你吃了什么?

     $ dbus-send --session \
        --type=method_call \
        --dest=org.manuel.BulletinBoard / \
        org.manuel.BulletinBoard.Put \
        string:"mytestapp" \
        array:byte:"what did you eat?" \
        array:byte:0x8B,0xAD,0xF0,0x0D

检索数据

现在我们可以通过询问DHT在键你吃了什么?下存储了什么来获取存储的数据。使用Get()命令,我们获取到我们之前存储的[8B,AD,F0,0D]值

     $ dbus-send --session \
        --reply-timeout=60000 \
        --print-reply \
        --type=method_call \
        --dest=org.manuel.BulletinBoard / \
        org.manuel.BulletinBoard.Get \
        string:"mytestapp" \
        array:byte:"what did you eat?"

     array [
        array of bytes [
           8B AD F0 0D
        ]
     ]

开发

  1. 获取Rust

  2. 克隆

    git clone https://github.com/manuels/bulletinboard-dht.git
    
  3. 构建

    cargo build --release
    

    (在bulletinboard-dht目录中)

依赖关系

~10MB
~190K SLoC