Python 如何实现Kademlia DHT(二叉树)
我正在尝试用python实现DHT。据我所知,路由表需要将根节点ID中的各个位与新条目进行比较。如果ID的位不匹配,则向左,如果匹配,则向右。这可以递归地完成,并且停止条件要么是已经到达ID长度的末尾,要么是已经到达叶节点。然后,每个叶节点都包含自己的kbucket(一个数组) 目前我尝试的是:Python 如何实现Kademlia DHT(二叉树),python,p2p,Python,P2p,我正在尝试用python实现DHT。据我所知,路由表需要将根节点ID中的各个位与新条目进行比较。如果ID的位不匹配,则向左,如果匹配,则向右。这可以递归地完成,并且停止条件要么是已经到达ID长度的末尾,要么是已经到达叶节点。然后,每个叶节点都包含自己的kbucket(一个数组) 目前我尝试的是: #!/usr/bin/python class Node: def __init__(self, id, data): self.id = id self.da
#!/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, node, id_index+1)
elif (node.id[id_index] != previous_node.id[id_index]):
return self.find_placement(node.left, node, id_index+1)
def add(self, id, 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, previous_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, level+1, '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()
目前我试图做的是找到一个新节点可能是其子节点的叶节点
谁能帮我弄清楚我到底做错了什么?如果我遗漏了任何需要的东西,我会提前道歉,并欢迎任何关于如何让这篇文章更好的建议