天天看點

java P2P

java P2P 英文原文位址:

http://www.javaworld.com/javaworld/jw-10-2001/jw-1019-jxta-p2.html

中文位址

http://www.matrix.org.cn/resource/article/43/43627_P2P_Jxta.html

摘要

Peer-to-Peer網絡毫無疑問是當今的熱點技術主題。Napster和Gnutella的廣泛使用證明了peer-to-peer應用的強大潛力。鑒于在這個定于大量的重複勞動,Sun Microsystems發起了Jxta工程-新一代的p2p應用程式開發平台。本文專門探讨了P2P和Jxta在這方面的成果。可以作為早期接觸者,程式員,愛好者開發P2P應用程式的簡介。(4,100 詞;十月 19日,2001年)

今天的Internet正在驗證一種變革。這種變革将會改變網絡的一個基本特征。所有的網絡終端包括桌面電腦,PDA,行動電話,都要要求更高的網絡狀況。這場變革在諸如Napster 和 Gnutella的應用軟體推動下,将會終結以伺服器為主導的Internet。這場變革就是P2P。

P2P(或者說peer-to-peer)網絡是一種基于操作上下文的網絡模型,任何一個節點都同時作為客戶機和伺服器。由于在傳統的客戶機/伺服器模式當中,客戶機和伺服器的角色已經實作定義好了,是以這是一種他們所不能提供的能力。

在這片文章裡,我對比了p2p網絡與client/server網絡。并介紹了Jxta(發音為jux-ta)這種由Bill Joy(Sun公司首席科學家兼公司執行官)引領開發的P2P計算平台。目前,Jxta由數百名開源開發者共同實作。Jxta工程承載P2P世界的多個期望。它定義了一系列協定,開發者使用這些協定可以開發幾乎所有的p2p程式。同時這些協定還可以适應應用程式所特有的需求。Jxta并沒有規定所使用的程式設計語言和使用環境,但是使用Java語言開發P2P程式具有先天的優勢,例如:可移植性,開發難度低,具有豐富的類庫。

P2P:總攬

現在大多數的分布式計算模型是基于client/server形式的。圖1描述了一個典型的client/server架構。

java P2P

圖1:client/server模型

這種架構下的工作模式是,客戶機發出服務請求,伺服器響應服務請求并提供服務。在Internet上存在這大量各種各樣的伺服器?D?Dweb伺服器,郵件伺服器,FTP伺服器,等等。Client/server架構是一種典型的中央集中式架構,整個網絡服務都依存中央節點(伺服器)而存在。如果沒有伺服器,網絡就存在就沒有價值;沒有它們,Web浏覽器将如何工作?是以說無論有多少浏覽器和使用者的存在,網絡隻有在存在的情況下才能工作。

和client/server架構類似,P2P同樣也是一種分布式網絡架構。但它和client/server架構有一個顯著的不同點。P2P架構是一種非集中架構(見圖2),在網絡中沒有伺服器或是客戶機的概念。對于網絡中的每一個實體,都會被認為是一個對等點(peer),它們擁有相同的地位,任何一個實體都可以請求服務(client的特性)和提供服務(server的特性)。圖2圖示了一個P2P網絡。

java P2P

圖2:peer-to-peer 模型

雖然所有的peer在網絡中都具有相同的地位,但并不是所有的peer都需要具有相同的性能。在P2P網絡當中,可以均有不同性能的多種節點,從移動裝置到工作站。一個移動peer由于其内在的限制即使網絡允許可能也并不能像伺服器那樣工作。

兩種網絡模型各有優缺點。可以想想如圖1那種的client/server架構,在網絡增長(client越來越多時),不可避免的将壓力附加給中央節點伺服器。每增加一個使用者,伺服器的能力就相對下降一些;當伺服器崩潰的時候整個網絡也就被摧毀了。

P2P網絡将不同的場景傳送出去。由于每一個實體(或peer)在網絡中都是一個活躍的參與者,是以peer将自身的特定資源貢獻給整個網絡,例如存儲空間和CPU計算周期。當越來越多的peer加入網絡當中的時候,網絡的能力也就随之增長。應此,随着網絡的增長,網絡自身的能力也會越變越強。這種擴充性是client/server架構所不具備的。

P2P網絡差別于client/server模型的令一個特性是隻要有一個peer是活躍的那麼網絡就被認為是可用的。P2P網絡隻有在沒有任何一個節點是活躍的時候才不可用。

在獲得P2P網絡提供優勢特性的同時,你将會付出如下的代價。首先,相比client/server模型來說,P2P網絡的管理如同一場惡夢。P2P網絡的上的增強安全政策,備份政策都将會更為複雜。其次,P2P協定相比client/server協定來說更加“多變”,peer可以随時的加入或者退出網絡。這種瞬時變化的特性将會引發對性能的擔憂。(參看"Bandwidth Barriers to Gnutella Network Scalability"擷取更多的資訊)

Jxta 解決方案

不同的協定,不同的架構,不同的實作是對P2P解決方案現狀的真實描述。目前,開發者門使用了很多種不同的方案來實作P2P應用。在client/server世界中顯的過剩的“标準”,在P2P世界中顯的如此罕見。用了解決這個問題,Sun公司開發了Jxta。

摘自Jxta的目标聲明:

Jxta工程要建立一種核心網絡計算技術,提供支援跨越平台,時間,空間P2P計算的一組簡單,小型,靈活的機制。工程首先才對P2P的功能進行總結抽象,然後建立能夠堅決目前P2P計算主要限制的核心技術。工程主要緻力于建立基本的機制将政策的選擇權保留給應用的開發者。

Jxta緻力于為P2P應用提供一個P2P平台基礎。其中包括一系列獨立于語言,平台和網絡技術之外的協定(假設并不知道網絡的下層實作)。這些協定解決了P2P應用的基本需求。協定的設計目标是簡單并且低成本,引用Jxta目标聲明的話就是“每一個裝置都有一個數字心跳”(every device with a digital heartbeat,這句話實在不好翻譯)。

Jxta目前定義了6個協定,但并不是要求Jxta peer實作全部的6個協定。Peer實作協定的數量取決于這個peer的能力;一個peer甚至可以隻實作一個協定。Peer也能夠根據自身的需求擴充任意一個協定。

值得注意的一點是Jxta協定本身并不保證互操作性。Jxta和TCP/IP在應用的時候是類同的。正如雖然FTP和HTTP都是建立在TCP/IP基礎之上的,但你不能用FTP用戶端去通路網頁。在Jxta中也一樣,假如有兩種應用都是建立在Jxta之上的,并不說明它們之間一定能夠具有互操作性。互操作性有開發者自己設計實作。盡管如此,開發者将應用建立在Jxt提供的護操作層之上,這樣就減少了對于護操作性的實作困難。

Jxta中的XML

不容置疑,提供統一的基礎協定的第一部就是采用一種可以在大多數平台上标示的語言形式。XML是一種完美的選擇。Jxta的開發者意識到XML很快就會成為資料交換的預設标準。XML提供了一種全局的,具有語言獨立性和平台獨立性的資料表示形式。同時XML也可以很容易的轉變為其它編碼形式。是以,Jxta使用XML定義所有的協定。

盡管Jxta的消息是使用XML定義的,但Jxta并不依賴于XML編碼。事實上,解析器是一個可選的元件,一個Jxta的實體甚至并不需要一個XML的解析器。考慮到XML是一種友善的資料表示形式。例如行動電話這樣小的實體可能會使用預先編譯好XML消息。

Jxta的術語:

在我們了解進一步的概念之前,我們來迅速浏覽一下Jxta的多種概念。

Peers (對等點)

     任何實作一個或多個Jxta協定的實體。一個Peer可以是從大型機到行動電話,甚至是一個移動傳感器的任何裝置。Peer是獨立存在的,并且與其它Peer的通信都是異步的。

Peer groups (對等點組)

     具有相同興趣的Peer可以集結成Peer Group(對等點組)。對等點組可能跨越多種實體網絡。

Messages(消息)

      Jxta網絡中的所有通信都通過接收和發送消息(messages)的方式來實作。這些Messages叫做Jxta消息,這些消息具有标準的格式,這也是具有護操作性的關鍵。

Pipes(管道)

      管道在Jxta環境當中建立虛拟的通信通道。Peer使用管道來發送和接收Jxta 消息。管道是一種虛拟的概念,peer不需要知道它們所在的實際網絡位址就可以使用管道,這是一種重要的抽象。

Services(服務)

   Peer和peer group都可以提供服務。由peer提供的服務屬于個人級服務,叫做peer服務,這種服務的方式和中央集中式服務相同。沒有其它peer提供這種服務;如果這個peer不是活躍的,怎麼這種服務就是不可用的。

   Peer Group提供的服務叫做peer group服務(對等組服務)。和peer 服務不同的是,這種服務不隻是針對某一個特殊使用者的,而是針對這個Group中的多個使用者。Peer Group服務更容易被使用,原因是當某一個使用者不可用的時候,其它的peer仍然會提供同樣的服務。

Codats(代碼/資料)

   Codat(代碼/資料),在Jxta當中,這個詞說明内容可以是代碼或是資料。Codats可以被釋出,發現,或是在必要是取代。

Advertisements(廣告)

      廣告用來釋出和接收Jxta網絡用的資源,例如peer,peer group,管道,或是codat. 廣告是以XML檔案的形式表現。

Identifiers(辨別符)

   在Jxta環境當中,辨別符起到了非常關鍵的作用。Jxta使用辨別符來識别資源,而不是使用實體網絡位址。Jxta的辨別符被定義為URN(統一資源名(Uniform Resource Name))。一個URN本質上就是一個URI(統一資源辨別符),這個URI在全局範圍内唯一存在,并且即使資源已經不在存在,但它的URI還是存在的。(請參看Resources擷取更多的資源)。

World peer group(世界對等點組)

每一個Jxta的Peer都預設的屬于world peer group。任何一個Jxta的peer都内在的屬于world peer group并能夠加入這個peer group。即使在peer無法在網絡上找到任何其它的peer的情況下,甚至在Peer沒有連接配接在網絡上的情況下所有的peer也都是屬于這個peer group的。

Net peer group(網絡對等點組)

在一個本地網絡中,網絡管理者可以建立一個任何peer都可以加入的peer group:這樣的peer group就是一個net peer group。這種group類似于DHCP服務。一個net peer group可以在管理者的限制下為peer提供全局接入的服務。

Rendezvous peers(集結點)

一個Rendezvous peer 是一個通過緩存其它peer廣告的而儲存有這些節點的資訊的特殊peer。應此,rendezvous電可以幫助其它的peer互相發現。Rendezvous peer點同樣可以将收到的發現請求資訊(discovery request)轉發給其它的Rendezvous peer.

Endpoints (終結點)

Endpoint是網絡的目的地節點,它可以使用網絡位址來表示。Peers一般并不直接使用endpoint,它們間接的通過pipe來使用endpoint。Pipe是建立在endpoint之間的。

Routers(路由器)

如何将資料包在Jxta網絡上傳送的節點稱之為Jxta路由器。并不是所有的peer都需要成為一個路由器。任何不是路由器的peer都需要找到一個路由器來傳遞它們的消息。

Jxta 協定

Jxta的關鍵建立在由Jxta社群所指定的一系列通用協定之上。這些協定可以被用作應用程式的基礎。這些協定被設計為低開銷的,協定本身和使用它們的應用程式所在的網絡拓樸環境是無關的。

Peer Discovery Protocol(PDP)對等點發現協定

Peer使用這個協定來發現被釋出出來的Jxta資源。由于廣告就是代表着釋出的資源,是以PDP的主要工作就是幫助peer來其它peer的廣告。作為最低級别的發現協定,PDP提供發現的最基本機制。應用程式可以選擇使用其它更進階别的發現機制。PDP可以作為低基本的協定為其它進階别協定提供服務。

Peer Resolver Protocol(PRP) 對等點解析協定

在通常情況下,peer向其它peer發送查詢消息來定位服務或者内容。Peer Resolver Protocol會将查詢的格式标準化。使用這個協定,peer可以發送通用的查詢并接收回複。

Peer Information Protocol(PIP)對等點資訊協定

PIP可以被用來在Jxta環境中對一個peer發出ping消息。當一個peer接收到一個peer消息的時候可以有幾種選擇:可以選給出一個簡單的回複,回複當中僅包含peer的運作時間。Peer也可以選擇發送一個完全的回複,當中包含它自身的廣告資訊。或者它也可以選擇忽略這個ping消息。

Peer Membership Protocol(PMP)對等點成員協定

對等點使用對等點成員協定來加入和離開peer group。這個協定識别peer使用的4個分散的步驟并為每一步的動作定義的Jxta消息:

      Apply:一個peer如果想加入一個group可以向這個group的成員驗證者提過申請。

      Join:在申請之後,peer可以選擇加入這個group

         Renew:如果要更新group的成員資訊,peer可以使用renew的消息。

      Cancel:peer可以選擇取消它在peer group中的成員資格。

Pipe Binding Protocol(PBP)管道綁定協定

在Jxta環境當中,peer使用管道來連接配接服務。一個peer可以動态的将綁定pipe的一端連接配接服務。Peer可以建立pipe,把它綁定到現存的pipe上,或是取消對pipe的綁定。在這些情況下,peer使用管道綁定協定。

Endpoint Routing Protocol (ERP) 終點路由協定

這個協定幫助peer将消息路由至目的地。ERP幫助peer 路由器查詢其它peer路由器用于傳遞消息的有效路由。

Jxta Java 綁定

觀察這些協定是怎樣工作的最好的辦法是了解一下Jxta Java 綁定,也就是Jxta的Java實作。開發者選擇在現有的協定基礎上開發應用或是使用他們自己選擇的語言和平台實作這些協定。盡管這種實作由于HTTP和TCP/IP的簡單和流行性選擇了使用他們來進行傳輸,但開發者可以選擇耕具網絡拓樸狀況選擇任何傳輸協定來實作Jxta協定。

讓我們迅速的分析一下今天的Jxta Java 實作(由于本文寫在2001年,是以具體實作發現目前已經有所變化。譯者注)

類組織:

         net.jxta.* 類

         net.jxta.impl.* 類

第一個包中包含了Jxta所有的接口,這些接口代表了Jxta的協定和核心子產品所提供的功能。第二個包中包含了這些接口的實作。接口和他們的實作必須被清晰的分開。接下來我們深入看一些例子。

我的peer在哪裡?

Peer是網絡上的一個獨立的,異步實體,它和一個peer ID關聯起來。你可以認為一個代碼的運作執行個體就是一個peer。目前,啟動類(net.jxta.impl.peergroup.Boot)将會提供main()方法,啟動以後将會成為一個peer。

一個peer擁有哪些能力取決于它屬于那個group。但是,作為一個基本的peer,它會擁有一些最基本的能力,比如說它的ID。這也就是說,任何一個peer都必須處在一個peer group當中:這個peer group叫做world peer group。也叫做platform peer group,world peer group由net.jxta.impl.peergroup.Platform表示,這個類是PeerGroup 類的一個實作(net.jxta.peergroup.PeerGroup)。

Peer group nesting (Peer group 嵌套)

假設有一個Peer P1,作為一個peer group PG1的成員,這個group提供一個基本的發現和查詢服務。現在假設網絡中存在另一個peer group,PG2, 提供更加強大的搜尋服務。P1如果想要使用這種服務就必須加入PG2當中去,但它可以同時使用PG1所提供的搜尋服務。要實作這個功能,我們可以使用Peer group嵌套。通過Peer group嵌套,一個peer group提供的服務即使在被其它的peer group重載的情況下,也可以被使用。它提供了一種繼承關系:第一個peer group,PG1,在這裡作為一個父組,PG2作為一個孩子組。在這種情況下,孩子組的服務覆寫了父組的服務。也就是說,一但P1加入了PG2,這種繼承關系就變為WorldPeerGroup/PG1/PG2。請注意到World Peer Group總是處在這種層次關系的最高端,是所有的Peer預設處于的group。

作為應用程式的Peer group

作為綁定的一種重要的抽象,一個應用(net.jxta.platform.Application)是一個可以由peer group初始化,啟動和停止的東西。有意思的是一個peer group由于應用的原因(net.jxta.peergroup.PeerGroup)經常會啟動其它的peer group(如果peer group 嵌套的讨論)。World peer group是一個例外。它作為peer group層次關系的基礎,并不會啟動其它任何的peer group。一個應用定義了三個方法:init(), startApp(), and stopApp()。

在一個Application 類中的這些方法如下所示:

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

管道和邊界節點(pipes and endpoints)

像我們早先提到的那樣,pipe是Jxta環境中用來進行消息傳輸的虛拟管道。Pipe由Pipe接口表示(net.jxta.pipe.Pipe),作為一種繼承自Service (net.jxta.service.Service).接口的服務。Pipe被進一步的劃分為輸入管道(net.jxta.pipe.InputPipe)和輸出管道(net.jxta.pipe.OutputPipe).PipeService 類(net.jxta.impl.pipe.PipeService)包含了使用綁定的pipe實作。

Pipe是建在在終端節點(endpoint)之上的。Endpoint類,net.jxta.impl.endpoint.Endpoint,是一個傳輸終結點的集合。Endpoint即可以使用propagate()方法來發送消息或是利用終結點消息實作(net.jxta.impl.endpoint.EndpointMessenger)來将消息發送到一個指定的終結點。這種終結點消息實作取決于具體的它所實作的傳輸協定的情況。舉例來說,net.jxta.impl.endpoint.http.HttpNonBlockingMessenger類就是将終結點傳輸實作建立在HTTP協定的基礎上的。

廣告(Advertisements)

所有的廣告都是從抽象超類Advertisement(net.jxta.document.Advertisement)繼承下來的。由廣告具體所代表的資源,我們可以将廣告進一步劃分為peer group廣告(net.jxta.protocol.PeerGroupAdvertisement),管道廣告(net.jxta.protocol.PipeAdvertisement),等等。廣告由一個AdvertisementFactory 類 (net.jxta.document.AdvertisementFactory)建立。使用工廠方法有助于隐藏廣告的内部實作。

服務(Services)

所有的服務都實作了Service 接口(net.jxta.service.Service)。服務是一個擴充了Application接口的應用。由于服務對象并不能夠直接被操縱,是以通常都使用Service接口通路Service 對象。舉例來說,Discovery接口 (net.jxta.discovery.Discovery) 代表 Discovery 服務。DiscoveryServic類(net.jxta.impl.discovery.DiscoveryService) 代表Discovery Service的實作。DiscoveryService類并不能夠被直接通路,而需要使用DiscoveryInterface接口來通路。(net.jxta.impl.discovery.DiscoveryInterface).

Jxta community projects(Jxta社群工程)

我們已經提到過,Jxta是一個由開源開發者,技術狂熱者和學術研究者參加的社群推動的工程。任何人都可以加入工程,并做出自己的貢獻。Jxta.org 提出了一些很有意思的工程。我們來了解其中的幾個。

The Jxta Shell

Jxta shell是一個建立在Jxta的Java實作上的範例應用程式。它以指令行方式為使用者提供了一種互動接入方式到的Jxta。Jxta shell使用和Unix相似的界面并提供相似的指令幫助使用者使用Jxta的源語。使用者可以從shell homepage下載下傳到Jxta Shell,它可以很容易的安裝和配置。Jxta的Shell指令和Unix的指令很想象。并且支援管道操作符(|)

在Jxta shell當中,大部分的指令都可以被動态的加載和激活,指令的加載與平台架構相對獨立。這就給了開發者一種友善的途徑,在shell當中加入自己的指令。我們在這裡列出一些基本的内嵌shell指令:

Man

   Man指令是Jxta的shell的幫助系統。使用這個指令可以列出目前的Jxta Shell當中所有可用的指令清單。如果需要查詢某個特定指令的的幫助資訊時,可以使用<command name>參數

Clear:

   将shell的螢幕清空

Env:

   Env指令将目前shell 會話的環境變量顯示出來。預設定義有七個環境變量:

1.        consin:預設控制台輸入管道

2.        consout:預設控制台輸出管道

3.        stdin:預設輸入管道

4.        stdout:預設輸出管道

5.        stdgroup:預設peer group

6.        rootgroup:預設 net peer group

7.        shell:根shell(root shell)

setenv:

設定一個shell環境變量

Cat:

     使用cat指令可以列印出一個Jxta對象的内容

Whoami

     顯示出一個peer或者peer group的資訊。如果沒有加參數的話,顯示出的是本地的peer資訊。

Rdvstatus

     顯示出peer目前所連接配接的所有的rendezvous peer。同時也顯示出目前peer是否是一個rendezvous peer。

Peers

使用peers指令用于發現處在同一個peer group中的其它peer。如果不加參數就會列出目前peer的所有已知peer。這是應為所有被shell發現的廣告資訊都被緩存在了本地。使用-r參數将會清除儲存在緩存中的peer廣告資訊。

Groups

   Groups指令類似于peers指令;用于發現peer groups。

Importfile

  将一個外部檔案導入shell的環境變量

Exportfile

   将環境變量導出到一個檔案中。

Mkadv

   使用mkadv指令将會根據shell環境變量資訊生成一個廣告。廣告可以是peer group廣告也可以是管道廣告。

Mkpgrp

Mkpgrp指令将會使用peer 廣告建立一個新的peer group。如果沒有指定廣告,shell将會建立一個net peer group的克隆。

Join

   使用join指令可以把peer将如到一個peer group當中

Leave

   使用leave指令可以使一個先前使用join指令加入peer group當中的peer退出該peer group

Mkpipe

  使用mkpipe指令将會傳見一個輸入或者輸出管道。管道從一個本地的輸入管道廣告檔案創立。

Talk

   使用talk指令可以在兩個遠端peer之間進行簡單的,最小化的即時消息會話。它包括三個步驟。第一,使用者注冊,主要包括為那個使用者建立一個新的talk廣告,這是一個one-time過程。使用者注冊是使用talk -register <nick>指令實作的。其次,一旦注冊完成,使用者可以登入并開始交談。使用者使用talk -login <nick>指令進行登陸。使用者還可以通過talk -search指令來搜尋其它的使用者。第三,一旦定位到另一位使用者,目前使用者可以使用talk -u <nick> <destinationUserName>來發送消息。

Exit

  使用exit指令退出shell

Jxta 内容管理服務(The Jxta Content Manager Service)

Jxta 内容管理服務(通常稱為CMS)用來幫助使用者在一個peer group當中共享與擷取由一個全局唯一的cotent ID所代表的内容。CMS同時也将内容通過中繼資料的形勢表現出來。更進一部 ,CMS幫助使用者對本地的内容進行管理,并允許使用者通過它們浏覽和下載下傳其它遠端peer的内容。

InstantP2P

InstantP2Pshi 是一個建立在jxta之上的peer-to-peer即時消息服務。它在功能上包括一對一的即時消息,群體聊天,檔案共享等功能。它可以工作在Linux, Solaris,Win32等多種平台之上。使用Personal Java 3.1的裝置也可以支援InstantP2P。

InstantP2P可以做為學習Jxta的一個良好範例。使用者可以使用自己選擇的昵稱登陸進入這個應用程式。之後就可以搜尋所有在網絡上可用的Jxta Group并選擇加入它們。使用者可以看到是以的group成員。使用chat選項來進行一對一的聊天,使用group chant進行群聊。使用share選項使用者可以在group成員之間共享内容。使用者也能夠搜尋group中的共享内容。InstantP2P内部使用内容管理服務來管理檔案共享。

Jxta的未來

在這篇文章中,我向大家介紹了peer-to-peer網絡。通過這些使用者可以發現Jxta給P2P世界所提供的功能。我也為大家介紹了在建立基于Jxta的應用的時候一些重要的術語和概念。

Jxta将會成為P2P應用的地層開發平台。現在的Jxta還處在初級階段,未來它會逐漸成熟提供一個強壯的,可靠的架構給P2P計算。由于Java是建構異構環境下應用的首選是以它也是建立P2P應用的自然選擇。我希望這篇文章能夠帶給您啟發,幫助您開始探索Jxta和P2P世界。

作者簡介:

Navaneeth Krishnan是Aztec Software and Technology Solutions的資深産品工程師,曾為使用者開發過多個電子商務解決方案和架構。他也是一位狂熱的P2P技術愛好者,對Jxta有深入的研究。他的Jxta社群項目iPeers,用來內建在P2P網絡中的人工智能。

資源清單:

Jxta工程首頁

http://www.jxta.org

Jxta協定細節及白皮書

http://www.jxta.org/white_papers.html

The Jxta shell 工程首頁

http://shell.jxta.org

The CMS 首頁

http://cms.jxta.org

The InstantP2P首頁

http://instantp2p.jxta.org/

如果想要了解更多的關于Gnutella網絡的擴充性問題,&#61548;        請閱讀"Bandwidth Barriers to Gnutella Network Scalability" (Clip2, September 2000)一文:

http://www.clip2.com/dss_barrier.html

了解更多關于URIs,URLs,和URNs的知識

http://www.ietf.org/rfc/rfc2396.txt

"The Gnutella File-Sharing Network and Java," “Gnutella檔案共享網絡與Java”Ken McCrary (JavaWorld, October 2000):

http://www.javaworld.com/javaworld/jw-10-2000/jw-1006-fileshare.html

Mark Johnson 在JavaOne 2001對于建立新的P2P協定動機所做的報告"Get Connected with Jxta" (JavaWorld, June 2001):

http://www.javaworld.com/javaworld/javaone01/j1-01-jxta.html

更多的關于企業級Java,&#61548;        請浏覽JavaWorld的标&#61548;        題索引:

http://www.javaworld.com/channel_content/jw-enterprise-index.shtml

訂閱JavaWorld’s每周免費新聞郵件

http://www.idg.net/jw-subscribe

jwebee