JXTA技术与应用发展
1、 概述
2、 JXTA的设计目标及有关概念
3、 JXTA协议
4、 JXTA应用与发展
一、概述
美国Sun公司自从1995年向世界推出了Java语言以来,每年都会在Java领域里推出新的技术,从JavaCard、J2ME到J2EE、JINI、JavaTV,推动了Java技术的发展和应用。在最近几次的旧金山的JavaOne会议中,JXTA是该公司向业界推出的较新技术。该技术的目的是为P2P的网络应用开发提供一个统一的平台,而且为了鼓励和支持该技术的发展,JXTA项目采用了开放源码的方式,因此吸引了大量业界人士参与到JXTA技术的研究与应用当中,JXTA Community(www.jxta.org)就是人气很旺的一个Java技术研究开发的网站。
JXTA最早起源于2000年的夏天,现在大家把JXTA看成是P2P的平台,JXTA的目标是要解决几个技术与商业上的难题。第一是解决众多P2P系统互不相通的问题。2000年,是P2P突飞猛进的高潮年,但高潮背后却是许多小公司用自己的封闭系统试图在Internet上圈一块地。Sun认为,只有互通才能真正发挥出P2P的优势,就好像IM(Instant Messaging),能互连的人越多,越有价值。所以Sun决定出面发布一个平台,使所有P2P系统都能连接起来,只有Sun这样位置中立、但在技术上有雄存实力被大家认可的公司才有希望做成这一平台。
JXTA的另外一个目的就是找寻一套数量最少、概念最简单的系统构成的“积木”。如果成功,这几块积木就会是今后大家构架信息系统的基本模块,从而帮助人们摆脱像Windows或TCP/IP这样的传统软件带来的包袱。Java、Jini和JXTA像是J的三部曲,Java取自著名咖啡产地名,Jini是genie(精灵) 的谐音,而JXTA则是Juxtapose的缩写。当时BillJoy用grep把所有J打头的英文词找出来,juxtapose跃然纸上,很是巧妙。既表现了P2P或肩并肩的意义,又说明JXTA不局限于P2P。但JXTA与众不同,它是由一系列网络协议构成的,用任何语言都可以实现,并不只限于Java,只有彻底独立于操作系统、网络传输技术以及程序设计语言,才真正达到了跨平台,而这样的技术,最容易受到业界的认同。
JXTA是项目创始人、Sun首席科学家BillJoy二十多年酝酿的结晶,“JXTA技术是网络编程和计算的平台,用以解决现代分布计算尤其是点对点(P2P)计算中出现的问题。”JXTA研究项目,将提供使用户更便捷地访问连接在互联网上的个人电脑资源的新框架,从而进一步拓展互联网的空间。同时JXTA也是Sun的ONE互联网战略的延续,并且将更积极的姿态与Microsoft的.Net战略和Hailstorm计划一争高低。Joy指出,JXTA可能是Sun One平台最简单的一部分,而不是打算将它变成象微软的.Net那样复杂的东西,而且JXTA也将是开放源代码的团体;有别于而微软的Passport和Hailstorm技术都是申请专利的专有技术,Sun希望通过公开JXTA源代码的方式,成为微软最有力的竞争对手,在公开源代码的领域中,Linux和Apache是卓越的成功典范,Sun也希望JXTA能铸造新的成功。
JXTA技术提供了基础性的机制解决当前分布计算应用中面临的问题,实现新一代统一、安全、互操作以及异构的应用。目前它支持基于Java技术的平台和系统。而将来JATX技术将不受到内存的限制而支持更多小型移动设备。JXTA通过Java技术和XML数据表达的结合,提供了强大的功能使得垂直应用得以交互,并且可以克服目前P2P软件中的限制。同时,通过小型、简单、便于开发的构造模块,JXTA将使开发者从建立各自框架的复杂工作得以解放,可以潜心关注于建设各类新颖、创造性的、分布式计算应用。
二、JXTA 的设计目标及有关概念
一)P2P技术
P2P即Peer to Peer,称为对等连接或对等网络,P2P技术主要指由硬件形成连接后的信息控制技术,其代表形式是软件;P2P并不是一个新的概念,因特网上的许多核心协议本身就是P2P的应用程序,因特网的发展过程也说明了这一点,我们可以通过下述特性来描述P2P:
从因特网的发展来看,目前已经完全有可能开发新的P2P应用程序来补充和取代现有的集中式应用程序,文件共享程序和聊天程序的成功已经吸引了许多程序员加入P2P程序的开发。而且随着技术的发展,P2P所面临的安全、控制和网络使用的问题将逐步解决。P2P系统可以提供如下功能:
-
Peer的独立控制能力----用户将变得非常强大,可以创建自己的组和虚拟网络,而且可以非常容易地发布自己的资源。
-
可靠性----P2P系统是任何人都可以获得的可靠系统。
-
扩展性----P2P系统的用户数量可以急剧膨胀,可以与最大的集中式系统媲美。
-
性能----各种资源之间可以协同工作来有效地解决问题。
P2P是一种基于互联网环境的新的应用型技术,主要为软件技术,P2P网络应用发展可能要涉及到4个方面关键技术:
1) 对于互联网上众多计算机,P2P应用比其他应用要更多考虑那些低端PC的互联,它们不具备服务器那样强的联网能力,同时对于以往的P2P应用技术,现在的硬件环境已经更为复杂,这样在通信基础方面,P2P必须提供在现有硬件逻辑和底层通信协议上的端到端定位(寻址)和握手技术,建立稳定的连接。涉及的技术有IP地址解析、NAT路由及防火墙。
2) 在应用层面上,如果两个Peer分别代表两家不同的公司,而且它们已经通过互联网建立连接,那么一方的信息就必须为另一方所识别,所以当前互联网上关于数据描述和交换的协议,如XML、SOAP、UDDI等都是一个完善的P2P软件所要考虑的。
3) 有通信就要有安全保障,加密技术是必须要考虑的。
4) 其他需考虑的有如何设置中心服务器,如何控制网络规模等。
与P2P相关技术,有许多其他的技术被称做P2P,或者与P2P相关,或者可以被当作P2P使用,主要是以下几方面内容:
二)JXTA设计目标及层次结构
1、
JXTA设计目标
首先,JXTA是为了构建P2P网络而制订的一组协议,是处理构建P2P网络所碰到的问题的解决方法,JXTA标准协议规范介绍如下:
“JXTA由六个协议组成,这些协议是专为特定的、分布式的、对等的网络计算而设计的。使用这些协议,Peer可以互相合作来建立自我组织、自我管理的对等组,而不必关心它们在网络中所处的位置(在网络边缘或者防火墙的后面),并且也不需要集中的管理机构。”
因此JXTA的核心是六个协议,其次,JXTA是P2P应用程序开发的运行平台;目前JXTA首先推出了基于Java的参考实现,提供了支持六个协议的Java API,JXTA还将推出包括C语言在内的其他编程语言的API,JXTA在设计时有如下几个目标:
-
操作系统无关
-
语言无关
-
为P2P应用提供服务和基础
从本质上讲,JXTA的目标是希望在任何设备,从台式机到PDA、汽车、洗衣机等设备都可以支持P2P编程。这里有几个概念上的目标,它们包括:
-
使用组来组织Peer并且在组内提供服务和应用的环境。
-
组可以使用认证和验证方式来控制组内的访问权限。
-
通过网络来发布关于Peer和网络资源的信息。
-
通过系统来发布各种请求。
-
提供一个基础平台,供Peer之间做路由和通信。在防火墙或者其他障碍后面的Peer之间的通信也是这个目标中很关键的一部分。
-
提供一种机制允许Peer之间可以彼此监视状态和资源。
除此之外还有一些其他目标,例如加密、支持不同的通信协议、易用性、稳定性和性能等,所有这些目标在设计JXTA协议和最初的Java API时,都被考虑到,另外,开发人员和Sun公司的管理者还考虑了以下目标:
-
系统应该允许任何设备直接加入到JXTA网络中去。
-
系统应该允许ISP对网络上的Peer进行集中管理。
-
系统应该支持数字产品版权的管理,例如购买的软件、音乐CD、电影等。
-
封装和抽象一些特定的核心功能,以便产生出商业方面的应用。
从上面列出的目标可以看出两点,首先要让企业觉得使用JXTA可以使自己对系统进行控制,原因在于大部分P2P系统没有集中式的管理,所以在应用中不受企业的欢迎;其次,对于硬件或者软件提供商来说,JXTA系统需要能够创造出利润。
根据以上这些目标,JXTA被设计成企业可以接受的、容易维护的、健壮的,并且能够满足任何P2P应用的概念。
2、
JXTA的层次结构
JXTA由三层组成,如图1所示。第一层是JXTA核心层,它包含了服务所需要的核心功能;第二层是服务层,它提供了访问JXTA协议的接口;第三层是应用层,它使用服务来访问JXTA网络和JXTA提供的功能。这样的设计和一个标准的操作系统比较相似,标准的操作系统包括核心操作系统、服务和应用程序。
图1 JXTA的层次结构
各层的说明如下所示:
-
核心层(JXTA Core):这一层封装了最根本的东西,包括Peer、对等组、Peer发现、Peer通信、Peer监视和相关的安全原语。
-
服务层(JXTA Services):这一层包括对于P2P网络不是必需的、但很通用的功能,如查找、共享、索引、代码缓存和内容缓存的机制。
-
应用层(JXTA Application):这一层包括了应用JXTA服务开发出来的完整的P2P应用程序,例如myJXTA,JXTA-CAD等应用程序。
三)JXTA有关概念
在JXTA网络中,有一些概念是需要熟悉和理解的,它们是从JXTA协议中提出的一系列的专有名词。
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平台上最基本的一种类型的管道。
-
同步的请求/应答----所有发出的信息都会收到一个应答消息,消息到达的顺序是按照它们发送时候的顺序。
-
成批发送----用来发送大量的数据。
-
流传送----通过流可以更有效地传送诸如声音、视频等大量的数据。
-
双向----它是两个单向异步管道的组合。
-
单向同步----所有发出的信息都会收到一个应答消息,消息到达的顺序是按照它们发送时候的顺序。
-
单向可靠安全的管道----所有发出的信息都会收到一个应答消息,并且这些消息都是加密的。
现有的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请求。
三、JXTA协议
有六个协议构成了JXTA的核心,JXTA通过这六个协议来完成Peer之间的通信,彼此之间的资源的发布和发现,信息的传递和路由,协议本身并不是应用程序,需要添加更多的代码来开发有用的应用,协议隐藏了很多细节,这样使得编写JXTA应用程序比从空白开发P2P应用要容易得多。
JXTA在JXTA协议规范中定义了它的协议。此规范描述了Peer间如何通信和交互,它并未描述实现的细节或如何编写P2P应用程序,下面是JXTA协议的列表,其中包含了协议名称的首字母缩略词,这六个协议如图4所示。
图4 JXTA的核心协议
1、对等机发现协议Peer Discovery Protocol(PDP):主要用来发布自己的广告信息,并且从其他Peer处获得广告。PDP允许一个Peer发现其他Peer的广告(包括Peer广告、对等组广告、服务广告,或者是管道广告)。该协议通过指定一种广告类型(如Peer、对等组)、一个XML标签名、一个匹配这个XML标签所表示数据的字符串来定义查询。它使用Peer Resolver Protocol来发送和传播搜索广告的请求。
2、管道绑定协议Pipe Binding Protocol(PBP):允许Peer之间建立虚拟的通信通道。
该协议首要关注的是通过Peer端点路由协议提供的路由连接Peer。它使用Peer Resolver Protocol来发送和传播搜索广告的请求。
3、对等机信息协议Peer Information Protocol(PIP):用来获得其他Peer的状态信息,包括更新时间、状态等等。该协议有时被用做ping命令,有时被用来获得一个Peer的基本状态信息,PIP消息的正文是自由格式的,它允许询问特定的Peer信息。此外,这种能力可以被扩展以提供控制能力,它使用Peer Resolver Protocol来发送和传播搜索广告的请求。
4、对等机解析协议Peer Resolver Protocol(PRP):允许Peer发送更一般的请求,并可以接收到该请求的回应;同时可以将请求分发到组内的一个或者多个匹配的处理器,Peer解析协议是一个基础通信协议,它按照一种请求/响应格式来进行,要使用这个协议,需要提供一个查询的Peer和一个包含能被目标Peer理解的XML请求消息,该协议被用来支持JXTA中的其他协议(PDP、PBP和PIP),而且允许传播查询,例如,如果一个Peer收到一个查询并且不知道答案,解析协议就会将该查询发送给别的Peer。
5、端点路由协议Peer Endpoint Protocol(PEP):通过该协议Peer以发送消息的形式获得一条路由路径。它使用Peer间的网关来建立一条包含一个或多个适合建立管道的管道协议组成的通路。管道绑定协议借助此Peer列表来建立Peer间的路由。一般情况下传统的路由器和DNS服务器会因为防火墙、代理服务器和NAT设备等原因而无法建立连接,而端点路由协议通过寻找网关来穿越诸如防火墙等障碍来建立连接。端点路由协议还可以同时帮助相互不支持对方使用协议的Peer进行通信。例如,如果你连接支持TCP的Peer-A和只支持HTTP的Peer-B,端点路由协议既可以选择一个可以支持此传输的网关,又可以选择多个并且相互协议兼容的一组网关。
6、集合点协议Rendezvous Protocol(RVP):通过该协议Peer可以对一个服务订阅或者被订阅。集合点协议负责在JXTA对等组内传播消息,它为Peer在组内接收和发送消息并且控制消息如何传播定义了一个基本的协议。
从编写P2P应用程序的角度而言,可以简单地划分上述协议的主要用途:
-
Peer Discovery----搜索资源
-
Peer Resolver----一般查询服务
-
Peer Information----监控
-
Pipe Binding----可寻址的消息传递
-
Rendezvous----消息传播
-
PeerEndpoint----路由
四、JXTA的应用与发展
一)JXTA的应用
1、
即时通信和文件共享(myJXTA)
myJXTA是在J2SE平台上的一个JXTA演示程序,主要为展示JXTA项目和P2P的一些概念,它提供了一些功能,诸如安全的一对一的交谈、组内的交谈、组内文档的共享、搜索和下载等。myJXTA使用JXTA平台的核心服务,完成发现组、加入组和创建组的功能;还有在两个Peer 间创建连接,完成一对一的交谈;或者在组内建立连接,完成组内的交谈以及组内文件的搜索和下载。该程序的主要目的是未了展示基于JXTA协议的P2P的工作方式。
2、
网络游戏(Chess)
JXTA技术已在许多游戏应用方面得到了展示,一个互动式的国际象棋比赛的应用程序使用JXTA来传递两个棋手间的对奕过程,并将它展现给观众,国际象棋游戏和“tic-tac-toe"游戏都可以用来展示JXTA在小型设备上的应用,一个游戏者可以创建一个新的JXTAPeer组并邀请全世界其他游戏者加入他的游戏,当然也可以限制他人进入他的游戏组。
3、协同工作
JXTA技术已经展示它在协同工作应用程序中的能力。用JXTA开发出来的集成开发环境可以允许一个以上的开发者同时开发一个软件程序;另外一个协作式的JXTA应用程序允许几个人同时编辑同一个电子数据表。其他JXTA项目中开发的合作开发工具包则利用了JXTA进行会话、共享浏览和文件共享。
由于具有通话功能,JXTA技术在合作开发中拥有这样一个优点:一个应用程序的开发不需依赖于服务器或其他中央管理系统。JXTA处理新发现的节点,并保证路线通畅,在用户和交互式应用程序间交换消息。
4、聊天程序
JXTA非常适合编写聊天程序,而且可以有多种实现方法,包括完全的集中式、代理方式到完全非集中式。而且一个非常有意思的情况是,用JXTA来实现一个集中式的聊天程序非常困难,而实现完全非集中式的聊天程序反而简单,因为JXTA平台本身已经完全解决了底层Peer之间的发现和通信问题。在现有的JXTA项目中已经有许多聊天程序的例子,包括myJXTA应用程序(原先称为InstantP2P)、JXTA shell中的Talk命令、HotWire应用程序和其他几个编程指南。
5、JXTA 社区
JXTA是一个开放源代码的项目,它是由JXTA社区http://www.jxta.org在推动发展。在这个站点上可以获取最新的JXTA文档和程序代码,而且你可以注册并加入到正在进行中的JXTA项目,参与并推动项目的进展;这些项目分类存放,为用户展示了JXTA各方面的功能;此外,站点上还有邮件列表,都是JXTA开发人员和P2P参与者就感兴趣的问题的讨论。
二)JXTA的发展
1、各种语言的实现
目前JXTA只有Java的实现版本,以至于大家谈到JXTA都认为它是用Java开发的一套P2P框架,而忽略了JXTA的实质只是一套独立于各种平台和语言的协议。因此在各种语言上实现JXTA成为一项非常重要的工作。只有这样,因特网上的用各种各样语言实现的应用软件就可以只需改写网络部分的代码而转换到JXTA平台上来。这不但大大地节省了工作量,而且将会吸引大量因为各种原因无法采用Java语言的软件加入到JXTA中来,从而大大促进JXTA协议的发展。现在正在进行的其他语言的实现有C,Perl,Python,Smalltalk等等,显然这还远远不够,也许我们将来需要看到用Pascal,VB,C#实现的版本。
2、各种平台的实现
跨平台,这是Java已经实现了的目标,但是并不表示JXTA就无事可做,一个真正的P2P网络不仅仅是包括PC这个大家目前已经熟悉的设备,它还应该包含各种现在以及将来能够连到因特网上的设备。头一个目标显然是PDA和手机这种移动设备,JXTA for J2ME以及PocketJxta都已经在进行中,而且已经可以使用;但是,我们还要考虑到将来的各种设备,这其中主要是各种各样的嵌人式设备。如果这些设备都运行JXTA平台,那么我们将看到一个真正的P2P世界。
3、各种应用
有好的应用,一个平台是不可能流行起来的。目前在jxta.org上登记的应用开发项目有多个,相比现实世界中的各种网络软件的数目,这个数字实在是很小。目前的JXTA应用主要集中在即时通信和文件共享上面,这似乎成了P2P的代名词。但是如果只局限于这些应用,JXTA的应用范围将会很有限。
4、Service
Service在JXTA中扮演着极其重要的角色,所有JXTA协议的实现都是以Service的形式存在着的。除了几个核心服务外,目前JXTA上有多个关于Service的项目正在开展着,从某种程度上来说,Service比Application更重要;如果没有好的Service,也就产生不了多少好的应用,在这些进行中的Service中,Search是其中关键的环节,在没有中心服务器的P2P网络中,如何有效地进行查找成为一个关键问题,与此同时,还需做到尽可能地减少占用的带宽。
作者:务实,多年从事J2EE网站及应用系统项目的开发和应用。
posted on 2007-03-11 21:07
happytian 阅读(305)
评论(0) 编辑 收藏