OpenKad开源项目

OpenKad是一个基于Kademlia算法的JAVA实现,它包括KadNet、KBuckets等核心组件。文章介绍了如何在Eclipse中编译OpenKad,分析了关键代码如KeyBaseRouting、Bucket接口及其不同实现,以及Kad网络中的消息对象类。涉及到的库有GUICE、AOPAlliance、GoogleGson等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenKad简介

OpenKad项目是一个kademlia算法的JAVA实现。

其主页地址为:http://code.google.com/p/openkad/

关于kademlia算法请看维基百科:http://zh.wikipedia.org/wiki/Kademlia

kademlia算法原文:Kademlia A peer-to-peer_information_system_based_on_the_xor_metric


在eclipse编译Openkad

  • 下载源码

  1. 下载本工程源码:http://code.google.com/p/openkad/
  2. 下载依赖库:
    1. GUICE:http://code.google.com/p/google-guice/(guice-3.0.jar)
    2. AOPAlliance:http://aopalliance.sourceforge.net/(aopalliance-1.0.jar)
    3. GoogleGson:http://code.google.com/p/google-gson/(gson-2.1.jar)
    4. Lambdaj:http://code.google.com/p/lambdaj/(lambdaj-2.4-with-dependecies.jar)
    5. Apache-codec:http://commons.apache.org/codec/(commons-codec-1.6.jar)
    6. Mockito:http://code.google.com/p/mockito/(mockito-all-1.9.0.jar)
    7. JAVAEE:javax.inject.jar
  3. 测试程序依赖库:JUnit:http://junit.sourceforge.net/(junit-4.10.jar)

  • 导入eclpise

  1. 打开eclipse,New->Other->SVN->从SVN项目检出,URL:http://openkad.googlecode.com/svn/trunk/openkad
  2. 右键test文件夹,build path->use as a source folder
  3. 下载上述链接库,并放入工程文件夹下,在Eclipse右侧资源栏找到,并右键->Build Path->add to build path.
  4. 打开test资源文件夹,打开il.technion.ewolf.kbr包,右键KeyBaseRoutingTest.java选择Run as->JUnit Test.


部分代码分析


package il.technion.ewolf.kbr

  • Interface

KeyBaseRouting.java

定义了所有Kad网络中可进行的操作。

MessageHandler.java

为KeybasedRouting提供了通知对象,当此节点收到远方节点中sendmessage 发来的对象时,本节点调用过register方法后的messagehandler类会得到通知,和远方发来的对象。(观察者模式)

 

  • Class

Key.java

用于标识节点ID,用KeyFactory生成本类对象

 

KeyGenerater.java

是测试生成key用的类

 

keyComparator.java

XOR metric比较方法实现类

 

KeyColorComparator.java

前者的派生类,用指定颜色比较KEY

 

RandomKeyFactory.java

(工厂模式) 调用了系统提供的MessageDigest类,输入生成算法名的字符串,位数,或者可以随机生成KEY

Node.java

Kad网络中的节点类,

Package il.technion.ewolf.kbr.openkad

  • Interface

Bucket.java

Kad网络中“桶”的接口,含有三个基本操作。向桶内添加Node,把所有桶内元素加入到制定的容器中,标记节点失效。

 

  • Class

SlackBucket.java

松弛桶:是bucket桶接口的一种实现。加入节点的策略是:

1. 当桶未满时,把新节点插入到桶的最后

2. 当桶满时,删除最老的节点,把新节点插入到最后。

 

StableBucket.java

稳定桶::是bucket桶接口的一种实现。节点的加入策略是:

(Kad经典算法)

  1. 如果该节点已经在桶,将其移动到最后
  2. 如果节点是不是在桶和桶是不充分的,将它移动到桶中的最后
  3. 如果节点是不是在桶桶是满的,平安桶中的第一个节点。
  4. 如果它返回的ping,移动它是第一个在水桶和不插入给定的节点
  5. 如果它不返回的ping,从桶中取出,并插入最后给定的节点

 

KBuckets.java

Kad算法中的k-桶实现类

 

KadNet.java

一个KeyBaseRouting接口的实现类

Package il.technion.ewolf.kbr.openkad.msg

这个包下定义了所有在kad网络中传送的消息对象类。

KadMessage.java

这个抽象类定义了所有在kad中传递消息所有类的父类。

KadRequest.java

这个抽象类继承于KadMessage.java,为所有消息请求的父类。

KadResponse.java

这个抽象类继承于KadMessage.java,为所有消息回复的父类。

StoreMessage.java

这个类定义了kad中RPC的STORE操作所应传递的消息类。

PingRequest.java

这个类定义了kad四种RPC操作中的PING操作消息。

PingResponse.java

这个类定义了kad四种RPC操作中的PING操作回复消息。

FindNodeRequest.java

这个类定义了FIND_NODE操作应传递的对象

FindNodeResponse.java

这个类定义了FIND_NODE接收操作者应该回复的对象。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值