首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >现有分布式哈希表的Hello World

现有分布式哈希表的Hello World
EN

Stack Overflow用户
提问于 2011-05-25 18:49:45
回答 2查看 1.1K关注 0票数 4

我熟悉分布式哈希表(DHT)的工作原理。可以编写一个程序将数据存储到现有的分布式哈希表(如Kademlia或Mainline DHT)中吗?有没有一个简单的“Hello World”类型的程序可以展示最简单的方法呢?

EN

回答 2

Stack Overflow用户

发布于 2012-03-09 22:26:25

分布式哈希表最好的hello world就是在Bittorrent的分布式哈希表上向引导节点发送一个'ping'。具体步骤如下:

  1. Bencode a bootstrap node.
  2. Wait KRPC PING message.
  3. Send it over UDP to abootstrap node.
  4. Wait for reply。

这些是我在开始自己的分布式哈希表实现之前刚刚采取的步骤。

票数 4
EN

Stack Overflow用户

发布于 2014-01-20 01:10:43

问题是可能已经过时了,但不管怎样。

如上所述,向现有分布式哈希表说“你好”的最简单方法是向分布式哈希表节点之一发送ping消息。让我们考虑一下基于Kademlia的Mainline DHT (MDHT)。

在端口6881上的地址router.bittorrent.com处有一台引导服务器。您可以将此服务器视为一个永久在线的通用分布式哈希表节点。此外,您还可以使用另一个节点,例如本地运行torrent客户端,它使用分布式哈希表。

我用Python写了一个小例子:

代码语言:javascript
复制
import bencode
import random
import socket


# Generate a 160-bit (20-byte) random node ID.
my_id = ''.join([chr(random.randint(0, 255)) for _ in range(20)])

# Create ping query and bencode it.
# "'y': 'q'" is for "query".
# "'t': '0f'" is a transaction ID which will be echoed in the response.
# "'q': 'ping'" is a query type.
# "'a': {'id': my_id}" is arguments. In this case there is only one argument -
# our node ID.
ping_query = {'y': 'q',
              't': '0f',
              'q': 'ping',
              'a': {'id': my_id}}
ping_query_bencoded = bencode.bencode(ping_query)

# Send a datagram to a server and recieve a response.
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto(ping_query_bencoded,
         (socket.gethostbyname('router.bittorrent.com'), 6881))
r = s.recvfrom(1024)

ping_response = bencode.bdecode(r[0])

print(ping_response)

我已经使用bencode模块对消息进行了本机编码和解码。

有关主线分布式哈希表协议的更多信息,请参阅this document。(请注意,该协议与原始的Kademlia协议略有不同。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6123263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档