您现在的位置是: 软件 > 开发者网络 > 程序方舟 > Java专栏 > 正文


-打开闪烁的新世界:体验Flash MX
-文字在平面设计中的运用
-Visual C++多媒体及图形、图像处理
-你会用3D Flash Animator吗?

P2P的Jxta解决之道
2002-03-30· ·QQ新人类编译··yesky

上一页  1 2 3 4 5 6  下一页

  Jxta Java捆绑

  要查看以上协议的最佳办法是浏览Jxta Java捆绑,它是用Java实现的一个Jxta参考。开发者可以在现有的实现上建立应用或者选择自己的语言和平台来实现这些协议。在参考中,为了简化,使用HTTP和TCP/IP来传送,不过你可以根据网络的拓扑,使用任何的传送协议来实现Jxta协议。

  让我们来快速查看一下现有的Jxta Java捆绑。

  类的组织

  Jxta的Java捆绑包含有两个主要的类层次:

The net.jxta.* classes
The net.jxta.impl.* classes

  第一个包包含所有的Jxta接口,它们是Jxta协议和核心建立块的Java接口。第二个包是这些接口的实现。这些接口和它们的实现必须是完全分开的。让我们来看一下这些包。

  我的节点在哪?

  节点是网络中的一个独立的、异步实体,与一个节点ID关联。你可以将运行代码的一个实例看成为一个节点。当前通过一个启动类(net.jxta.impl.peergroup.Boot)来启动一个节点(它包含有一个main()方法)。

  一个节点的性能与它从属的组有关。不过,每个节点都有一些基本的性能--例如拥有一个ID。这意味着存在至少一个节点组--world节点组,因为每个节点都必须是该节点组的一个成员,它也被称为平台节点组,world节点组由net.jxta.impl.peergroup.Platform来表示,它是节点组类(net.jxta.peergroup.PeerGroup)的一个实现。

  节点组嵌套

  我们可以假设P1是节点组PG1的一个成员,该组提供一个基本的发现和搜索服务。在网络中有另一个节点组PG2,它提供一个更高级的搜索服务。P1必须加入PG2以利用其高级搜索服务,同时它也使用PG1提供的发现服务。要做到这一点,我们可以使用节点组嵌套。通过节点组的嵌套,一个节点组的服务可过载一个或者多个其它节点组的服务。这样我们就可以得到一个继承的关系:第一个节点组,在这里是PG1,它作为一个父组,而第二个PG2则是一个子组。在这里子组的搜索服务过载父组的相应服务。因此,当P1加入PG2,你可以知道节点组的嵌套是WorldPeerGroup/PG1/PG2。要注意到world节点组一直在最顶层,所有的节点隐含都是该组的一个部分。

  作为应用(applications)的节点组

  在捆绑中有一个很重要的抽象,一个应用 (net.jxta.platform.Application)就是一个节点组可以初始化、启动和停止的东西。要注意的方面是一个节点组(net.jxta.peergroup.PeerGroup)通常会启动另一个节点组(refer to the discussion on peer group nesting) ,因此应用也是这样。一个例外是平台(或者称为world)节点组。它并不由任何其它的节点组启动,它构成了节点组继承关系的基础部分。一个应用定义了三个方法:init(), startApp(), and stopApp()。

  在Application类中的方法有:

public void init(PeerGroup group, Advertisement adv);
public int startApp(String[] args);
public void stopApp();

  管道和终点

  上面已经提到过,管道是虚拟的通信通道,它用来在Jxta环境中传送信息。管道由管道接口(net.jxta.pipe.Pipe)代表,它被认为是一个服务,因此由Service接口(net.jxta.service.Service)继承而来。管道由可以分成为输入管道(net.jxta.pipe.InputPipe)和输出管道(net.jxta.pipe.OutputPipe)。PipeService类 (net.jxta.impl.pipe.PipeService)中包含有在捆绑中用到的管道实现。

  管道是在终点上实现的。终点类(net.jxta.impl.endpoint.Endpoint)是传送终点的一个集合。终点可以使用propagate()方法来广播信息,或者使用一个endpoint messenger(终点使者)实现来发送信息到一个指定的终点(net.jxta.impl.endpoint.EndpointMessenger) 。终点使者的实现是根据传送的协议来进行的。例如,net.jxta.impl.endpoint.http.HttpNonBlockingMessenger类是一个实现HTTP协议的终点使者。

  Advertisements(广播)

  在捆绑中,所有的广播都是由抽象的超类Advertisement(net.jxta.document.Advertisement)扩展而来。根据广播表示的资源类型,它还可以进一步分为节点组广播(net.jxta.protocol.PeerGroupAdvertisement),管道广播(net.jxta.protocol.PipeAdvertisement)等。AdvertisementFactory类(net.jxta.document.AdvertisementFactory)创建广播。factory可用来隐藏广播的真正实现。

  服务

  所有的服务都是实现Service接口的(net.jxta.service.Service)。一个服务就是一个应用,因此它扩展Application接口。因为服务对象不可以直接操作,所以一个服务接口通常访问一个Service对象。例如,Discovery接口(net.jxta.discovery.Discovery)表示Discovery服务。DiscoveryService 类(net.jxta.impl.discovery.DiscoveryService)表示Discovery服务的实现。DiscoveryService类不可以直接访问,而是通过一个DiscoveryInterface接口(net.jxta.impl.discovery.DiscoveryInterface)。

上一页  1 2 3 4 5 6  下一页

【责任编辑:方舟】
【发表评论】【关闭窗口】
■ 相关内容
 使用C#开发一个简单的P2P应用
 P2P技术与软件纵横
 众智数码:中国P2P业内标准的制定者?
 P2P技术概览
 P2P能做什么
 P2P的赢利之路
 P2P在国外
 P2P――网络世界新革命
 P2P,路在何方?
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!