对等点加入Collaborative-Learning P2P网络后,需要进行上一次运行身份的恢复或者当是第一次加入Collaborative-Learning P2P网络时,需要确定运行的身份。因此,分为以下两种情况:
(1) 如果对等点曾经加入过Collaborative-Learning P2P网络,则它根据Recently Identit来恢复上一次运行时的身份。
(2) 如果对等点是第一次加入Collaborative-Learning P2P网络,对等点按以下过程自动确定其身份和选择出Rendezvous Peer。
① 从peer组factory获得NetPeerGroup。
② 建立查找服务(Discovery Service)。
③ 如果发现有处于相同地区的Rendezvous Peer,且该Rendezvous Peer的性能比自己高,则自己以普通边缘节点 Edge peer 身份运行并加入这个对等组;否则,自己作为本地区的Rendezvous Peer身份运行。
④ 如果发现没有处于相同地区的Peer,则自己作为本地区的Rendezvous Peer身份运行。
⑤ 重新修改Recent Identity为当前值。
按照上述过程,若新对等点能以Rendezvous Peer身份运行,则说明在当前的网络环境下,它是具有高性能的并且应当承担搜索任务。
确定节点身份的主要程序如下:
Publish class PublishGroup
{
static PeerGroup myGroup = null; //定义组变量
Private DiscoveryService discoSvc; //定义查找服务
//启动JXTA服务,获得NetPeerGroup组变量和建立查找服务
private void startJxta()
{
myGroup = PeerGroupFactory.newNetPeerGroup();
discoSvc = myGroup.getDiscoveryService();
}
}(www.daowen.com)
public class GroupDiscoverDemo implements DiscoveryListener
{
…//定义变量
public PeerGroupAdvertisement findGroup() //发现组广告
{
discovery.addDiscoveryListener(this); //加入接口监听事件
rvpadv = discovery.getAdvertisements(null,
DiscoveryService.GROUP,null,null,5); //查找组的广告
MessageElement rvpzone = rvpadv.getMessageElement(null, "zone")
If(rvpindustry = peerindustry and rvpzone = peerzone) //自动确定对等点身份
{
MessageElement RvpCapability = rvpadv.getMessageElement(null, "PeerCapability");
//RVP的性能参数
if (RvpCapability > PeerCapability){PeerIdenty = EdgePeer} //为普通边缘对等点身份
else{ PeerIdenty = RendezvousPeer} //为超级对等点身份
}
else{ PeerIdenty = RendezvousPeer} //为超级对等点身份
public void updatePeerRecentIdenty(Peer Identy); // 修改RecentIdenty为当前值
}
}
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。