如何解决如何实施Kademlia DHT
我正在尝试在python中实现Kademlia(二叉树)DHT。据我了解,路由表需要将根节点ID中的各个位与新条目进行比较。如果ID的位不匹配,则向左移动;如果ID的位匹配,则向右移动。这可以递归完成,并且您的停止条件是到达ID长度的末尾或到达叶节点。然后,每个叶节点都包含其自己的kbucket(数组)。
目前我尝试的是以下内容:
#!/usr/bin/python
class Node:
def __init__(self,id,data):
self.id = id
self.data = data
self.left = None
self.right = None
def __str__(self):
return '{id:' + self.id + ',' + self.data + '}'
class Tree:
def __init__(self):
self.root = None
def find_placement(self,node,previous_node,id_index):
if (node == None):
return previous_node,id_index
elif (node.right == None and node.left == None):
return node,id_index
elif (node.id[id_index] == previous_node.id[id_index]):
return self.find_placement(node.right,id_index+1)
elif (node.id[id_index] != previous_node.id[id_index]):
return self.find_placement(node.left,id_index+1)
def add(self,data):
new_node = Node(id,data)
if (self.root == None):
self.root = new_node
return
previous_node = current_node = self.root
id_index = 0
current_node,id_index = self.find_placement(current_node,id_index)
if (current_node.id[id_index] == new_node.id[id_index]):
current_node.right = new_node
elif (current_node.id[id_index] != new_node.id[id_index]):
current_node.left = new_node
new_node.parent = current_node
def printtree(self,node=None,level=0,lr = ''):
if (node == None):
node = self.root
print (lr,level,node)
if (node.left != None):
self.printtree(node.left,level+1,'L')
if (node.right != None):
self.printtree(node.right,'R')
if __name__ == "__main__":
t = Tree()
t.add('0000','test')
t.add('0100','test')
t.add('0010','test')
t.add('0001','test')
t.add('0101','test')
t.printtree()
当前,我试图做的是找到一个新节点可能是其子节点的叶节点。
有人可以帮助我弄清楚我到底在做错什么吗?如果我遗漏了任何必要的内容,请事先致歉,并欢迎提出任何有关如何使本帖子变得更好的建议!
我想我的问题是什么
当前,我的节点是根据与根节点相同索引处的第一位相矛盾的第一位进行排序的。相反,我需要做的是对节点进行排序,以便引导后最右边的节点是您自己的节点。
如果是这种情况,根节点将是什么?在根节点是您自己的节点而又仍保持网络完整性的情况下,是否有办法做到这一点?
在向网络中添加新节点之后,我将如何重构树以维护您遍历的分支(每个新的分叉)代表叶节点ID中的单个位的规则?至此,最右边的节点是最接近您自己的节点,最左边的节点是最远的节点。
可在此处进一步详细说明树:https://www.researchgate.net/publication/2492563_Kademlia_A_Peer-to-peer_Information_System_Based_on_the_XOR_Metric
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。