天天看點

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:

·   Peer知道其他Peer的存在。

·   Peer在一個虛拟的網絡中運作。

·   Peer同時具有Client和Server的特點。

·   多個Peer可以組成為一個Peer組。

從網際網路的發展來看,目前已經完全有可能開發新的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使用,主要是以下幾方面内容:

·   JINI技術;

·   軟體代理(Agent)技術;

·   JXTA的競争者(Gnutella和Freenet等);

·   Web Services技術。

二)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平台上最基本的一種類型的管道。

·   同步的請求/應答----所有發出的資訊都會收到一個應答消息,消息到達的順序是按照它們發送時候的順序。

·   成批發送----用來發送大量的資料。

·   流傳送----通過流可以更有效地傳送諸如聲音、視訊等大量的資料。

·   雙向----它是兩個單向異步管道的組合。   

·   單向同步----所有發出的資訊都會收到一個應答消息,消息到達的順序是按照它們發送時候的順序。

·   單向可靠安全的管道----所有發出的資訊都會收到一個應答消息,并且這些消息都是加密的。

管道還可以分成以下兩種類型:

·   點到點類型----點到點的管道連接配接兩個不同的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請求。

   三、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網絡中,如何有效地進行查找成為一個關鍵問題,與此同時,還需做到盡可能地減少占用的帶寬。