2

我有一个分布式哈希表 (DHT),它在同一程序的多个实例上运行,可以在多台机器上运行,也可以在同一台机器上的不同端口上进行测试。这些实例依次启动。首先,基节点启动,然后其他节点加入它。

我有点困扰我应该如何实现第二个节点的连接,在不定义所有边界情况的情况下,它也可以与所有其他节点一起工作(当然都有相同的程序)。

对于要加入的节点,它首先发送加入消息,该消息被传递到正确的节点(这里它只是基节点),然后用通知消息进行回答。序列图 通过这两条消息,基本节点的前任和现有节点的后继被设置。但是如何设置其他属性?我知道,有时节点会向其后继者发送一条稳定消息,后者将其与其前任进行比较,并与通知消息和前任一起返回,以防它与消息的发送者不同。

现在,基节点不能发送消息,因为它不知道它的后继节点,新节点可以发送一个,但前继节点已经有效。

我猜,这两个属性最终都应该指向另一个节点,才能完全连接。

这是另一个图表,我认为应该是第三个节点加入的序列。但同样,我什么时候根据稳定消息更新属性,什么时候发回通知消息?在图中很容易看到,但在代码中很难确定。序列图第三个节点join

4

1 回答 1

0

如果在接收到连接消息后它为 NULL,则此处的技巧是将后继者设置为与前任者相同的值。协议的其余部分可以很好地处理其他所有内容。正确的连接序列图

于 2017-12-01T00:14:14.667 回答