同时加入两个对等组,在一个对等组中能不能发现另一个对等组发布的通告?

突然想到这个问题,以前理所当然认为肯定不能发现!现在想来未必不能啊,还是实践一下。

-----------------------------------------------------------------------------------------------------------------------------

刚才测试了一下,在NetPeerGroup下建了一个对等组暂且名为RootPeerGroup。

然后在RootPeerGroup下发布通告adv。

然后先后调用NetPeerGroup和RootPeerGroup的发现服务执行getLocalAdvertisements,并分别将发现的通告输出到控制台。

结果RootPeerGroup发现了通告adv并输出到控制台;而NetPeerGroup没有发现通告adv。

这样看来某个对等组发布的通告只能被同一对等组发现。 等我找找源代码看看这个是如何实现的。

-----------------------------------------------------------------------------------------------------------------------------

算了,源代码一时看不明白,在下面这本书中找到了答案

 

P60~61页写到

JXTA发现

对等体首先要做的是了解其周围环境。对等体在四周环境中寻找资源、支持自身、访问需要的服务以及扩展自己的范围。...

JXTA发现与对等组概念的关系十分密切:JXTA中的发现是在对等组环境中执行的。前面已经说过,每个对等体都会加入到NetPeerGroup中。在NetPeerGroup环境中执行的发现使得任何对等体都可能发现在NetPeerGroup中发布的任何通告。由于NetPeerGroup中通告的数量十分巨大,因此在NetPeerGroup环境中执行发现是不切实际的。对等体应该尝试在NetPeerGroup环境中发现对等组,然后再尝试着在更小的对等组内发现其他资源。

发现范围

对等体的发现范围对应于执行发现的对等组环境。例如,在图4-3中,如果发现是在Peergroup2的环境中执行,那么只有存储在Peergroup2成员对等体上的通告才能够被发现。该对等组的环境使得对等体能够在一个相对比较小得范围内执行发现操作,并减少了由于这种操作占用大量网络资源的风险。

 

请注意,某个对等体可能属于多个对等组(如图4-3中交叉的对等组)。发布通告时,发布该通告的对等体通过选择在哪个对等组中发布通告来定义发现的范围。同样的通告可以在多个对等组中发布。在图4-3中,对等体A同时在对等组2和对等组3中发布通告。这就意味着只有对等组2和对等组3的成员才能够发现该通告,而对等组1的成员则不能。每个对等组对应于一个不同的发现范围。

 异步发现模型

JXTA发现API使用一种异步机制来发现通告。...

--------------------------------------------------------------------------------------------------------------------------------

那么又有这样一个问题:对于一个事先大家都知道的通告(例如管道通告),处于不同对等组的结点是否能通过这个管道通告建立管道进行通信呢?

例如结点P1在group1中,结点P2在group2中,当然结点P1和P2都在NetPeerGroup中。

想了一下,这个情况应该不会出现。因为管道服务也是属于对等组的服务,不同的管道服务创建的输入/输出管道估计连不到一起,另外还有一个安全性的原因(不加入该组却能够通过管道与该组成员进行通信,这是不应该出现的)。

唔,这个没有验证。

---------------------------------------------------------------------------------------------------------------------------------

上面提到的一些问题都跟对等组这个概念有关,我们看一下上面那本书P22~23页对对等组的说明:

对等组

对等体自行组织成多个组。JXTA没有没有定义这些组是什么,也没有定义为什么会存在这些组。原因是JXTA框架支持组的创建和组成员资格的定义,但只能由互相协作的成员来定义组、加入组,以及退出组。对等组有很多其他的作用,包括:

定义一组服务和资源

某个成员为了参与某此竞拍,就必须找到提供竞拍服务的JXTA对等组。该成员必须加入该组。只有加入该组的成员才能使用组内所提供的服务。

每个对等组内都会有很多重要的资源。服务就是一种特定的JXTA资源。对等体要想使用某个特定对等组内的资源,就必须要加入到该对等组中。与此类似,只有人们都加入到同一个组内,他们之间才能互相通信。

提供一个安全区域

...

建立区域

...

创建一个监控的环境

...

原文地址:https://www.cnblogs.com/cuizhf/p/2172307.html