1、使用多路復(fù)用或者異步I/O模型,這本是服務(wù)器段常用的技術(shù),但在P2P應(yīng)用,每臺(tái)機(jī)器既是服務(wù)器,又是客戶(hù)端,共享了一個(gè)十分受歡迎的文件,可能會(huì)有很多希望連接者,或者你下載一個(gè)受歡迎文件時(shí),可能搜索到數(shù)百上千的Peer,此時(shí)就很有必要采用多路復(fù)用或者異步I/O技術(shù),降低應(yīng)用程序所占用的資源。
2、支持傳統(tǒng)的協(xié)議,包括HTTP和FTP,其實(shí)這兩種技術(shù)能夠和P2P網(wǎng)絡(luò)集成,其中一種辦法就是,在提供下載地址的同時(shí)提供一個(gè)種子文件下載,例如服務(wù)器中提供了ABC.rar文件,同時(shí)提供一個(gè)ABC.rar.md5文件允許下載,這樣P2P下載工具下載時(shí),通過(guò)md5在P2P網(wǎng)絡(luò)中搜索更多的資源,這樣客戶(hù)能夠獲得更好的速度,服務(wù)器端也可能降低下載的網(wǎng)絡(luò)流量。
3、流行的P2P網(wǎng)絡(luò)協(xié)議支持,包括BT和emule,這兩種都是公開(kāi)協(xié)議了,都有開(kāi)源的實(shí)現(xiàn),可以參考并重寫(xiě),要支持并不困難。
4、健壯性。如同emule一樣,將文件分塊(piece)的同時(shí),把每一塊摘要一個(gè)piece_ID,將所有的piece_ID再摘要成一個(gè)總的ID,成為AICH。其實(shí)這也是一種很簡(jiǎn)單的技術(shù),實(shí)現(xiàn)起來(lái)并不困難,做法可以多種多樣。
5、對(duì)大型局域網(wǎng)有特別支持?,F(xiàn)實(shí)中,存在很多大型的局域網(wǎng),局域網(wǎng)之間的擁有高速的帶寬。對(duì)局域網(wǎng)的特別支持辦法也有很多的,例如,類(lèi)似BT那樣,在局域網(wǎng)里建立一個(gè)Tracker Server。若是基于JXTA,可以在局域網(wǎng)里部署聚合點(diǎn)(Rendezvous)
6、支持P2P目錄共享,現(xiàn)在流行的P2P下載工具,都不支持以目錄為單位實(shí)現(xiàn)P2P共享和下載。其實(shí)支持P2P目錄共享也不困難,在提供共享時(shí),提供一個(gè)目錄結(jié)構(gòu)信息就可以了。目錄結(jié)構(gòu)信息dir_info可以這樣記錄:子文件或子目錄路徑 偏移量 長(zhǎng)度。當(dāng)然把目錄壓縮然后提供下載也是可以的,不過(guò)這樣會(huì)浪費(fèi)共享者的磁盤(pán)空間。目錄共享,要考慮共享之后文件進(jìn)行修改,添加新文件等事情,使用dir_info能夠更好解決這種問(wèn)題。
7、關(guān)于通告。一個(gè)P2P共享資源(包括文件和目錄),應(yīng)該包括三個(gè)ID:content_id、aich_id、dir_info_id。其中content_id是整個(gè)資源的摘要,aich_id是每塊id進(jìn)行摘要產(chǎn)生的id,dir_info_id是dir_info的摘要id。
content_id可用資源搜索,建議采用MD5摘要產(chǎn)生,因?yàn)楝F(xiàn)在很多網(wǎng)上提供下載的文件,都提供一個(gè).md5后綴的校驗(yàn)文件。
aich_id用于校驗(yàn)和智能恢復(fù)
dir_info_id。如果計(jì)算content_id時(shí),dir_info獨(dú)立計(jì)算,則需要提供dir_info_id,用于校驗(yàn)dir_info。理論上dir_info可以作為content的一部分,但是我覺(jué)得dir_info獨(dú)立計(jì)算會(huì)帶來(lái)很多好處。
8、關(guān)于傳輸。資源的傳輸,應(yīng)該包括三部分,hashset的傳輸、dir_info的傳輸、內(nèi)容數(shù)據(jù)的傳輸。內(nèi)容傳輸是分塊傳輸?shù)?,我覺(jué)得采用BT的默認(rèn)值256K一塊挺好的。每一塊(piece)摘要計(jì)算一個(gè)piece_id,所有的piece_id放在一起,就是一個(gè)hashset,hashset這個(gè)名字不大好,不直觀,但既然emule協(xié)議是這樣會(huì)說(shuō),我也這樣說(shuō)好了。dir_info是可選的,文件共享不帶dir_info。
9、P2P下載技術(shù)的應(yīng)用范圍應(yīng)該擴(kuò)展,程序的安裝更新都應(yīng)該加入P2P的支持,將會(huì)大大提高程序的用戶(hù)體驗(yàn)。
10、P2P的平臺(tái)應(yīng)該具備良好的擴(kuò)展性。當(dāng)我們構(gòu)建起一個(gè)龐大的P2P平臺(tái)時(shí),不單單只是在其上共享文件,有很多應(yīng)用可以部署在其上,包括現(xiàn)在很流行的P2P視頻,分布式計(jì)算等等。即時(shí)通訊也是可以構(gòu)建在P2P網(wǎng)絡(luò)上的。面對(duì)眾多的應(yīng)用需求,我們需要一個(gè)具備良好擴(kuò)展性的協(xié)議,不應(yīng)該像BT和emule那樣,除了下載,別無(wú)它用。可能基于JXTA是一種較好的選擇。
11、安全。P2P網(wǎng)絡(luò)應(yīng)該支持安全特性,一些團(tuán)體,一些企業(yè),需要限定范圍內(nèi)共享資源。例如NASA的衛(wèi)星數(shù)據(jù)共享項(xiàng)目SAXTA,采用JXTA,就是因?yàn)镴XTA支持安全特性。我想很多的P2P應(yīng)用場(chǎng)景,都需要安全,例如,企業(yè)只希望內(nèi)部員工之間實(shí)現(xiàn)P2P資源共享等等。