1.前言
最近,P2P(Peer-to-Peer)又成為了因特網(wǎng)上的一個熱點。P2P是因特網(wǎng)的一種應(yīng)用模式,其意思是指網(wǎng)絡(luò)上的任何設(shè)備(包括大型機、PC機、PDA、手機、機頂盒等等)都可以平等地直接進行連接并進行協(xié)作。想比當(dāng)前因特網(wǎng)上主流的應(yīng)用模式Client/Server或者Client/Service而言,P2P具有自己鮮明的特點和優(yōu)勢。(這也是我對它著迷的地方。呵呵……J)
有了P2P技術(shù),因特網(wǎng)不需要一個大型的服務(wù)器,這對于有些行業(yè)(尤其是網(wǎng)絡(luò)游戲)來說,是非常“幸運”的!因為P2P技術(shù)都很方便的實現(xiàn)你只化很少的money就可以達到你想要的效果。(是不是心動了?呵呵……J)
一些常見的P2P應(yīng)用程序:聊天程序,游戲(尤其網(wǎng)絡(luò)游戲),文件共享,協(xié)同工作和白板。
當(dāng)然,P2P網(wǎng)絡(luò)也應(yīng)具備的下列特點:
① 互操作性:P2P系統(tǒng)很容易的找到并連接對方,彼此進行交流。
② 平臺無關(guān)性:P2P系統(tǒng)應(yīng)該設(shè)計成獨立于編程語言如C,Java等,獨立于系統(tǒng)平臺如Windows和UNIX,獨立于網(wǎng)絡(luò)平臺如TCP/IP和BLUETOOTH。
③ 廣泛性:P2P系統(tǒng)可以運行在任何有數(shù)字處理功能的設(shè)備上。
2.JXTA是什么
首先,JXTA是為了構(gòu)建P2P網(wǎng)絡(luò)而制訂的一組協(xié)議,是解決構(gòu)建P2P網(wǎng)絡(luò)必須要解決的問題的方法。共有六個協(xié)議(關(guān)于這些協(xié)議后面會詳細的談的)。
其次,JXTA是P2P應(yīng)用程序開發(fā)的運行平臺。目前,JXTA首先推出了基于Java的參考實現(xiàn)的。
它三層組成:如圖1-1所示:
圖1-1 JXTA的層次結(jié)構(gòu)
第一層是JXTA核心層,它包含了服務(wù)所必需要的核心功能,包括Peer、對等組、Peer發(fā)現(xiàn)、Peer通信、Peer監(jiān)視和相關(guān)的安全原語;第二層是服務(wù)層,它提供了訪問JXTA協(xié)議的接口,包括對于P2P網(wǎng)絡(luò)不是必需的,但很通用的功能,如查找、共享、索引、代碼緩存和內(nèi)容緩存的機制;第三層是應(yīng)用層,它使用服務(wù)來訪問JXTA網(wǎng)絡(luò)和JXTA提供的功能,包括了應(yīng)用JXTA服務(wù)開發(fā)出來得完整的P2P應(yīng)用程序,如myJXTA,JXTA-CAD等應(yīng)用程序。
下面簡略的介紹一下JXTA的一些概念吧:
3.JXTA的一些概念
Peer(對等機):一個虛擬的通信點。一個用戶可以有多個Peer,一臺計算機或設(shè)備上同樣可以有多個Peer。
Peer Group(對等組):一種組織Peer并且發(fā)布組內(nèi)的特定服務(wù)的方式??杀粍?chuàng)建、加入、退出;在一個組里可以更新一個組成員的關(guān)系。
Pipe(管道):Peer之間的虛擬通道,可以透過防火墻的障礙進行通信。從而使得Peer在大多數(shù)網(wǎng)絡(luò)情況下都可以通信。
Advertisement(廣告):一個XML文檔,用來描述JXTA的消息、Peer、對等組或者服務(wù)等。它必須遵守編碼、標(biāo)簽和內(nèi)容的標(biāo)準(zhǔn),用來交換JXTA網(wǎng)絡(luò)上可以獲得的任何信息。大多數(shù)JXTA的廣告編碼是使用UTF-8。
Message(消息):有兩種方式來處理消息:①使用XML格式;②使用二進制格式。
Rendezvous Peer(集合點):一個能夠處理來自其他Peer請求的Peer。也可以將請求委托給其他集合點。
Router Peer(路由Peer):一個支持Peer端點協(xié)議的Peer。
Gateway Peer(網(wǎng)關(guān)Peer):一個作為通信中繼的Peer。與Rendezvous Peer不同的是,它是用來在Peer間傳遞消息,而Rendezvous Peer是用來傳遞請求的。
好了說了這么多的東西,連我都有點暈了。J 呵呵……下面開始做一個例子來熟悉一下吧:
4.下載并安裝JXTA
軟件地址:http://www.jxta.org,請下載最新穩(wěn)定版本。我下載的是2003-12-15更新的穩(wěn)定版。它提供了幾種平臺,根據(jù)你的操作系統(tǒng)選擇你需要的JXTA。當(dāng)然你也可以把它的源代碼都可以下載下來,幫助你了解JXTA是如何工作的,不過要想編譯這些代碼,你還得使用Apache Ant工具,可以在http://www.apache.org下載。還有一個要注意的是你還得安裝JDK1.3.1或更高的版本,推薦JDK1.4版本。
下面講一下配置:
第一次運行JXTA程序時,JXTA將自動顯示配置工具。在Basic settings頁面里,填上一個你認(rèn)為很酷的名字,表示你的Peer Name。點擊OK。下一個界面輸入安全用戶名(Secure Username)和密碼(Password),然后在Experienced Users Only頁面里填上你的IP地址和端口,TCP默認(rèn)端口為9701,HTTP默認(rèn)端口為9700,并點擊“+”按鈕。復(fù)選框的意思也就一目了然了。當(dāng)然你也可以點擊Download relay and rendezvous lists按鈕來下載一些可供使用的TCP和HTTP rendezvous列表,以及網(wǎng)關(guān)列表。
如果你有防火墻一定要選擇Use a relay(Required if behind firewall/NAT) 復(fù)選框。
恭喜,你現(xiàn)在就可以感受和體驗JXTA程序了。J
5.Hello JXTA的簡單程序
程序源代碼:
//HelloJXTA.java
import java.io.InputStream;
import net.jxta.peergroup.PeerGroup;
import net.jxta.peergroup.PeerGroupFactory;
import net.jxta.exception.PeerGroupException;
public class HelloJXTA {
public static void main(String args[]) {
System.out.println("Starting JXTA....");
HelloJXTA myapp = new HelloJXTA();
myapp.startJXTA();
System.exit(0);
}
public void startJXTA(){
PeerGroup pg = null;
try {
pg = PeerGroupFactory.newNetPeerGroup();
}catch (PeerGroupException e) {
System.out.println("Fatal error:group creation failure");
e.printStackTrace();
System.exit(1);
}
System.out.println("Hello JXTA!:)");
System.out.println("Group name = "+pg.getPeerGroupName());
System.out.println("Group ID = "+pg.getPeerGroupID().toString());
System.out.println("Peer name = "+pg.getPeerName());
System.out.println("Peer ID = "+pg.getPeerID().toString());
System.out.println("Peer BaseClass = "+pg.refTcpProtoSpecID.getBaseClass());
}
}
但要注意的是,此程序在編譯時,要用到jxta.jar文件,因此我們這樣來編譯程序:
D:>javac –classpath .\lib\jxta.jar HelloJXTA.java
這還不算復(fù)雜了,運行時候就有點復(fù)雜了:
D:>java –classpath .\lib\jxta.jar; .\lib\log4j.jar; .\lib\jxtasecurity.jar; .\lib\cryptix-asn1.jar; .\lib\cryptix32.jar; .\lib\bcprov-jdk14.jar;.\lib\jxtaptls.jar;. HelloJXTA
第一次運行程序的時候,會自動出現(xiàn)JXTA平臺的配置界面(以后只會出現(xiàn)登錄界面,如圖1-2所示,注意:登錄的是Secure Username,而不是Peer Name),和上面的配置一樣。同時,你還可以發(fā)現(xiàn)當(dāng)前的目錄下多了個.jxta的目錄:
l PlatformConfig文件:由JXTA的配置工具生成,是一個符合XML規(guī)范的文本文件。如果你刪除它,下次運行HelloJXTA文件時候會出現(xiàn)JXTA平臺配置界面。
l Cm目錄:本地的緩沖目錄,記錄了發(fā)現(xiàn)的所有的PeerGroup的信息。在本例中,應(yīng)該發(fā)現(xiàn)jxta-NetGroup和jxta-WorldGroup兩個目錄。
l Pse目錄:存放Peer用于安全認(rèn)證的證書信息。
圖1-2 JXTA登錄界面
運行結(jié)果,如圖1-3所示:
圖1-3 HelloJXTA運行結(jié)果
當(dāng)然你可以把上面的命令寫成.bat文件也是可以的,但也可以把上面的包都加入到classpath的環(huán)境變量中去。如果你還是覺得有點麻煩的話,那就選擇一個編譯器。比如JCreator Pro 2.0(我只有2.0沒用2.5 J)。Configure —> Options —> JDK Profiles —> Edit,在Classes頁面里Add Package。將lib目錄下的*.jar都添加到Classes里面中去。也將jre\lib\目錄下*.jar添加進去。編譯、運行,都是OK的!呵呵……入門就說到這里,下一篇將關(guān)于JXTA的一些應(yīng)用程序。J