作者: 務實Thursday, October 9 2003 2:57 PM
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網站及應用系統項目的開發和應用。
原文地址:http://www.zdnet.com.cn/developer/tech/story/0,3800067013,39174505-9,00.htm