JXTA编程基本知识和经验总结

来源:互联网 发布:ubuntu手机刷机包 编辑:程序博客网 时间:2024/06/14 00:44
给初学者一些解惑!
1、Peer(对等点)

  Peer是一个虚拟的通信点。在一台计算机或者设备上可以有很多个Peer,一个Peer并不是一个用户,因为一个用户可以有多个Peer,同一个设备上 也可以有多个Peer(在测试的时候经常用到)。因为Peer不等同于用户,所以需要将用户和Peer抽象出来并分离开。

  Peer与特定的网络服务联系得很紧,在JXTA的参考实现中,Peer可以使用网络提供的基本服务,例如rendezvous(集合点服务), router(路由服务),gateway(网关服务)等,这些基本服务又可以提供搜索和通信服务,一般来说,并不是所有的Peer都使用这些服务,它们 只使用这些服务的一部分。

  2、PeerGroup(组)

  是一种组织Peer并且发布组内的特定服务的方式。对等组可以被创建、加入和退出,在一个组里还可以更新一个组成员的关系,由于一些原因,需 要对成员关系进行一些限制,例如为了通信的安全、隐私的考虑等。这里使用一种协议来认证,它专门收集信息并判断其是否符合成员关系的要求。

  为应用程序提供了一种环境,例如对某个话题感兴趣的Peer可以组成一个组,并且在组内使用一个聊天服务来讨论。这样,聊天的信息就会限制在那些加 入到这个组内的成员之间。并且,对于想加入到这个组的Peer,可以使用成员ID来进行认证;没有这个ID的Peer不能够加人到组内,也就不能够使用组 内的聊天服务,也可以把看成一个虚拟的私人网络VPN,一个VPN只允许几个计算机之间互相交流,而不允许因特网上其他的成员加入,由于VPN使用 了加密的方式,对于偷听者他们不能够理解组内的谈话,对等组也可以限制Peer的加入,同样也可以对谈话消息加密。

  3、Endpoint(端点)

 在JXTA应用中,端点是最基本的通信方法。一个端点就是实现了特定通信协议的Peer的地址。一个Peer可以有多个端点,这样可以通过不同的协议来与其他Peer通信。

  端点不一定要是物理地址,端点可以允许物理地址发生变化。端点的一个简单例子 就是一个IP地址加上一个端口。通过使用这些值,可以打开一个流并且与目标Peer通信。然而,JXTA在流的基础之上又放置了一层,称之为Pipe(管 道)。这样,不是将一个流连接到一个地址,而是把一个管道连接到端点上。端点和管道的好处在于,不用去关心Peer所使用的真正的地址和协议是什么。使用 抽象出来的端点和管道,可以为创建P2P应用提供强大的功能并降低复杂性。由于管道使用通信协议来连接,端点描述了协议和连接的所需要的信息。因此端点可 以描述HTTP、TCP、BEEP以及其他可以支持的通信协议。

 一个Peer可以支持一个或者多个端点。通过使用多种协议,Peer可以提供更有效率的方法。也就是说,如果两个Peer都在防火墙的后面,可以直接通过它们的TCP端点来通信;如果两个Peer要穿过防火墙去通信,则需要使用HTTP的端点。

 4、Pipe(管道)

 管道是Peer之间的虚拟通道,通常,我们认为对等通信是单个的通信连接,但是也并不是总是这样的,因为防火墙和其他障碍的存在,许多Peer并不能直接连接,这时,管道更像一个在多种通信协议之上的虚拟层,可以通过起网关作用的Peer对通信提供中继支持。

  管道是JXTA最基本、最重要的特性,它提供了一种很好的方案,使得Peer在大多数网络情况下都可以通信,而不用去管防火墙或者其他的障碍,即使你不知 道另外一个Peer的位置以及它所使用的协议等信息,通过管道仍然可以与之通信;管道作为一种抽象的方法,隐藏了一些细节,比如在多个连接的时候可能会有 多个Peer参与进去,管道也可以重新定位,找到原来的Peer。在JXTA的参考实现中,有几种常用到的管道,它们是:

  • 单向异步----这种管道只用来做单向通信。管道是异步的,消息到达时可能不是顺序的。这是JXTA平台上最基本的一种类型的管道。
  • 同步的请求/应答----所有发出的信息都会收到一个应答消息,消息到达的顺序是按照它们发送时候的顺序。
  • 成批发送----用来发送大量的数据。
  • 流传送----通过流可以更有效地传送诸如声音、视频等大量的数据。
  • 双向----它是两个单向异步管道的组合。   
  • 单向同步----所有发出的信息都会收到一个应答消息,消息到达的顺序是按照它们发送时候的顺序。
  • 单向可靠安全的管道----所有发出的信息都会收到一个应答消息,并且这些消息都是加密的。

管道还可以分成以下两种类型:

  • 点到点类型----点到点的管道连接两个不同的Peer。可以使用多个起网关作用的Peer来创建连接。
  • 传播类型----将一个Peer连接到多个目标Peer。

    现有的JXTA参考实现已经提供了单向异步管道、单向可靠安全管道和双向的管道。    JXTA和传统的网络是非常不同的,大多数网络协议或者没有地址,或者有一个固定的地址,而JXTA抽象出一个概念叫做端点,用来作为地址。一个Peer 可以有多个端点,Peer可以通过一种或者多种协议例如TCP、HTTP等进行通信,所以可以使用多个端点,JXTA使用多种传输协议的目的是为了在与其 他Peer通信时可以选择最好的方式。如果一个Peer在企业的防火墙的后面,可以使用HTYP来与防火墙之外的Peer通信,还可以使用TCP来与防火 墙内局域网内部的Peer通信,通过灵活使用多个传输端口,对特定的Peer使用特定的协议,以得到最好的速度和响应。

5、AdvertiSement(广告)

     一个广告就是一个XML文档,它用来描述JXTA的消息、Peer、对等组或者服务等。广告都遵守编码、标签和内容的标准,广告用来交换JXTA网络上可 以获得的任何信息。例如,一个Peer创建了名称为“MyChat”的对等组后,就可以使用IP多播方式把广告发布到本地的JXTA网络;也就说,子网中 的每一个Peer都会收到一份广告的副本,此外广告还会被发送到集合点去。

    Peer使用一种叫做集合点(Rendezvous)的特殊Peer来发现网络上其他地方的广告。集合点Peer可以存储广告并且支持搜索。Peer可以 使用对等组的名字或者其他属性来搜寻该对等组广告。有了对等组的广告,其他的Peer就可以使用广告中的XML来实例化并加入到“MyChat”这个对等 组中。一旦成为对等组的成员之后,Pear可以使用对等组的环境所提供的服务。

    广告实际上是P2P网络中的“名片”,P2P网络中的任何资源,包括Peer、对等组、管道等都可以用广告来描述,目前是在P2P网络中标志资源,并且可 以相互找到; 大多数JXTA广告的编码是使用UTF-8,它是对Unicode的一种ASCII编码方式,UTF-8使用的是8位编码,Unicode使用的是16位 编码,因此可以节省一半的空间,只有在消息体中间可能会使用到完全的Unicode编码,在消息体里可以指定使用Unicode或者其他的字符集作为编码 方式。

6、Message(消息)

    在JXTA中,有两种方式来处理消息。一种是使用XML格式,数据都遵循XML标准被包装到消息里;另外一种是使用二进制格式。尽管希望对所有的JXTA 消息都使用XML格式,可是由于大量的消息需要传送,使用XML格式的消息会导致效率较低,而且由于消息通常是在程序之间传送的,所以可以规范的消息内容 使用二进制的格式;对于其他的仍然采用XML格式。

    在一个XML协议中使用二进制消息看起来似乎不太合理,但事实上使用二进制消息,除了可以得到紧凑的格式之外还有很多其他优点。首先数据可以使用一些标准 技术进行压缩,对文本等数据的压缩可以节省大量的传输时间;另外,许多消息本身就是二进制的格式,例如文件共享程序中共享的文档可能就是二进制的,因此可 以直接使用二进制的格式;还有一个问题就是加密,为了加密可以把数据转化成为二进制,然后直接使用二进制的消息来传输。

7、Rendezvous Peer(集合点)   

    一个集合点首先是一个Peer,而且是一个能够处理来自其他Peer请求的Peer。集合点也可以将请求委托给其他Peer,当然那些Peer也必须是集 合点。使用集合点的一个主要目的就是为了方便在本地网络之外搜索广告。集合点通常拥有更多资源,并且可以存储大量的有关它周围Peer的信息。

    集合点也可以作为搜索的传递者。集合点可以转发发现请求到其他的集合点(原集合点通过与其他Peer的广告交互而得到了被转发集合点的信息)。每一个集合点如果本身没有被请求的信息它都会转发该请求。

                          图2 通过集合点进行Peer搜索的过程

   图2说明了一个典型搜索过程。远程搜索从Peer1开始,它首先通过IP多播(IP Multicast)询问本地的Peer2和Peer3,Peer2和Peer3很可能和Peerl处于同一个局域网内,所以很快收到了搜索请求。接下 来,如果Peer2和Peer3没有所搜索的特定资源,搜索将通过集合点进行,Peer1会向它的集合点Peer发出搜索请求,如果该集合点Peer也没 有所需的广告信息,该集合点Peer会向它所知道的集合点Peer发出搜索请求。需要注意的是,除了和提出查询请求的Peer处于同一局域网内的Peer 收到查询请求外,在局域网外只有集合点才会收到查询请求。

    IP多播(IP Muhicast)是一个一到多的消息传输协议。IP多播用来发送数据的副本到一组地址。在P2P应用程序中,IP多播有两个好处。首先,因为多播使用一 个组地址而不是使用IP地址,一个Peer可以在不知道接收者地址的情况下发送消息。这样做的结果是在多播网络中的所有Peer都可以响应发出请求的 Peer,将有关查询的结果信息、甚至是自己的IP地址(用于与请求Peer直接通信)发送回去。

    IP多播的第二个好处是减少使用带宽。因为所有的Peer都可以看到一个单一的消息,没有必要向每一个Peer发送消息的一个副本。当发送大量的数据到一 组Peer时,这一点是非常重要的。使用多播的一个缺点是一些防火墙和路由器会阻塞多播的消息。在因特网提供商之间通过因特网主干网可以支持多播消息,不 过这种服务是需要额外付钱的。还存在其他IP多播的障碍,比如个人防火墙、子网路由器。这就是为什么JXTA不是仅仅支持IP多播的原因。一般情况下,只 要在防火墙后能够支持多播对于大多数的P2P网络就足够了。你可以这样来利用本地的多播,先将消息发送到每一个网络的某一个特定的Peer上,然后该 Peer又通过本地的多播将消息发送给本地的Peer。

    只有集合点允许进行超出局域网的搜索。一个Peer可以选择成为一个集合点,但这不是必须的,作为集合点好的一面是集合点可以缓存的形式保留从其他集合点 得到的查询结果的副本;不好的一面是,该Peer将占用很多的内存和带宽。由于请求数量可能很多并且大量的广告数据会消耗很多的计算机资源,在这种情况下 我们可以选择将计算机作为专用的集合点。集合点同时可以作为企业内部网的网关和路由器,其效果和使用传统的路由器是一致的。在每一个子网内也需要使用一个 集合点,是否选择使用专用的集合点Peer取决于安全性的要求和使用的P2P应用的范围。P2P网络的拓扑结构需要通过多个的例子来进行测试并且需要定期 监控。特别要注意的是:当P2P网络的服务在大量Peer上存有副本时,P2P网络的效率更高。有些时候并不是额外的集合点就可以提高网络的效率。

    当一个Peer在搜索广告时或者是其他服务使用集合点机制来路由消息时,集合点才被使用,因此一个Peer对集合点的需要不是持续的;为了能够更好地发挥 作用,一个连接到因特网的集合点最好尽可能地暴露给网络上的多个Peer,在防火墙内把所有的Peer都配置为集合点不一定能够发挥很大的作用。

8、RouterPeer(路由Peer)

    JXTA中的一个路由Peer是一个支持Peer端点协议的Peer,不是所有的Peer都需要实现该协议,因为和传统的网络路由器一样,我们只需要少数 几个路由器去支持一个大网络,JXTA路由器和传统的路由器非常相像,最主要的区别是P2P不是非常固定并且包括了很多非静态地址。

    9、GatewayPeer(网关Peer)

    JXTA中的一个网关Peer是一个作为通信中继的Peer。网关Peer和集合点的不同之处在于,网关是用来在Peer间传递消息,而集合点是用来传递 请求的,网关Peer就像是无线电转发器或者说是Peer间的一个中介,它传递消息,因为有防火墙、NAT设备和代理服务器的存在,网关对网络的连通具有 决定性的作用,网关可以存储消息,并且等待希望得到这些消息的接收者来收集它们。

    网关的存在是因为因特网非常混乱。混乱的原因是有各种各样的用于防止Peer间通过公用访问方法通信的安全保障和障碍物,另一个原因是各个Peer所支持 的协议是不同的,一些Peer可能使用TCP,另一些可能使用HTTP。在无线情况下,我们需要使用无线应用协议(WAP),网关尽可能多地支持这些协 议,因此它可以作为不同类型协议间的中介,JXTA目前支持TCP和HTTP,不过对其他协议的支持正在开发中。

    在因特网上网关是与大多数安全机制交互的关键,防火墙、代理服务器和NAT设备是主要的安全屏障。

图3 通过网关对等机进行Peer间的通信

 

图3 说明网关Peer2是怎样作为Peer1和Peer3之间的交互接口的。网关将从Peer1来的TCP消息转换成HTTP消息传递给Peer3。当消息从 Peer1发出时,是通过TCP发往网关Peer2,网关Peer2存储了这个消息,直到Peer3向它发出获得消息的HTTP请求。

 
原创粉丝点击