国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Peer-to-Peer Sockets 工程入門

2019-11-18 12:19:02
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  Peer-to-Peer (P2P)Sockets工程在JXTA peer-to-peer虛擬網(wǎng)絡(luò)重新實(shí)現(xiàn)了對(duì)應(yīng)于標(biāo)準(zhǔn)TCP/ip網(wǎng)絡(luò)中的java標(biāo)準(zhǔn)的Socket,ServerSocket,和InetAddress等類。該工程同時(shí)還引入了一些注入Jetty web server,Apache xml-RPC客戶端和服務(wù)器庫(kù),Apache Jasper jsp引擎之類的流行web package。使這些服務(wù)可以運(yùn)行在Peer-to-Peer Sockets 的框架下。
  
  在這片文章結(jié)束的時(shí)候,你會(huì)理解對(duì)P2P Sockets packages的需求和以及開發(fā)它的動(dòng)機(jī),學(xué)會(huì)怎么配置P2P Socket 庫(kù)使之在你的系統(tǒng)上能夠運(yùn)行,學(xué)會(huì)怎么樣建立P2P的服務(wù)器和客戶端Socket,怎么使用P2P的InetAddress 類,還包括框架下的安全問(wèn)題以及它的局限性。
  
  動(dòng)機(jī)
  
  P2P Socket工程的設(shè)計(jì)的使用對(duì)象是對(duì)以下幾個(gè)領(lǐng)域有愛(ài)好的開發(fā)者:
  
  ●將Internet回歸到end-to-end的原則當(dāng)中
  
  ●一種繞過(guò)ICANN和Verisign的替代peer-to-peer域名系統(tǒng),這個(gè)系統(tǒng)是完全分布式的,對(duì)更新?lián)碛斜葮?biāo)準(zhǔn)DNS快的多的響應(yīng)速度。
  
  ●一種任何人都可以建立活著使用網(wǎng)絡(luò)服務(wù)的Internet,及時(shí)他們使用動(dòng)態(tài)的IP地址或是沒(méi)有IP地址,或是只有內(nèi)網(wǎng)地址(NAT),或者是在ISP的防火墻之后。
  
  ●一個(gè)每一個(gè)Peer都能夠自動(dòng)的建立一個(gè)Web Server,提供XML-RPC服務(wù),能夠快速的將這種服務(wù)提供給其他的Peer。
  
  ●使為Peer-to-Peer網(wǎng)絡(luò)添加Java Socket和ServerSocket 的應(yīng)用更加輕易
  
  ●享受更酷的科技
  
  P2P Socket 工程在JXTA peer-to-peer網(wǎng)絡(luò)上重新實(shí)現(xiàn)了標(biāo)準(zhǔn)java.net報(bào)當(dāng)中的類。一些人可能要問(wèn)“難道標(biāo)準(zhǔn)TCP/IP socket和ServerSocket不是已經(jīng)是peer-to-peer的了嗎?”標(biāo)準(zhǔn)的TCP/IP socket和server socket在理論上是peer-to-peer的,不過(guò)由于防火墻,NAT設(shè)備,以及DNS所存在的政治或是技術(shù)的問(wèn)題,在實(shí)際上卻沒(méi)有做到這一點(diǎn)。首先,Internet上的許多peer使用的都是通過(guò)DHCP協(xié)議取得的動(dòng)態(tài)IP,這些IP由通過(guò)NAT設(shè)備共享和過(guò)濾,還有一些IP地址由于防火墻的限制,很難被訪問(wèn)到。在這樣的條件下建立server socket應(yīng)用要么是不可能的,要么就需要在應(yīng)用層進(jìn)行精妙的控制來(lái)繞過(guò)這些限制。其次,TCP/IP Socket依靠于DNS系統(tǒng)來(lái)將用戶友好的主機(jī)名轉(zhuǎn)變?yōu)镮P地址。DNS在理論上就是辦分布式的,但是在治理層面上,DNS是在ICANN下集中式治理的,而ICANN是一個(gè)反應(yīng)遲鈍的,沒(méi)有創(chuàng)新意識(shí)的組織。再次,標(biāo)準(zhǔn)的DNS對(duì)對(duì)那些過(guò)濾或是使用動(dòng)態(tài)IP地址的edge-peer支持的并不好,更新需要花費(fèi)很長(zhǎng)的時(shí)間傳播下去而且并不提供PResence信息。對(duì)那些想要開發(fā)能夠擴(kuò)展DNS到新的領(lǐng)域(例如將即時(shí)消息的用戶名和存在信息加入到DNS)的新應(yīng)用的開發(fā)者來(lái)說(shuō),DNS系統(tǒng)的技術(shù)和政治因素阻礙了他們的工作。
  
  JXTA是一個(gè)用于在TCP/IP之上建立peer-to-peer覆蓋網(wǎng)絡(luò)的開源工程。在網(wǎng)絡(luò)中的沒(méi)一個(gè)peer都會(huì)被分配到一個(gè)和IP地址類似的號(hào)碼,即時(shí)他們沒(méi)有固定的IP地址或是出在防火墻之后。在JXTA 網(wǎng)絡(luò)上的super-peer通訊運(yùn)行應(yīng)用層的路由協(xié)議來(lái)儲(chǔ)存例如假如到達(dá)其他的peer,如何加入peer group,其他peer提供了怎么樣的內(nèi)容之類的信息。JXTA應(yīng)用層在Peer之間提供了中繼的代理服務(wù),是出在防火墻或是NAT后的Peer可以正常的通信。Peer可以自己組織成為Peer Group,這樣可以將所有的查詢請(qǐng)求限定在natural security container當(dāng)中。任何peer都可以分布式的建立并發(fā)布一個(gè)peer group,其他的Peer通過(guò)使用其他的super-peer可以搜索并發(fā)現(xiàn)這些peer group。Peer之間的通信通過(guò)pipe的方式來(lái)進(jìn)行,這和Unix系統(tǒng)當(dāng)中的Pipe非常的類似。Pipe是對(duì)兩個(gè)peer之間通訊方式的一種抽象,它幫助peer互相通訊,即使他們處在不同的網(wǎng)絡(luò)區(qū)域當(dāng)中。
  
  JXTA是一種非常強(qiáng)大的框架。但是,它并不是一種輕易學(xué)習(xí)的框架,將現(xiàn)有的軟件移植到JXTA下也不是一件輕易的事情。P2P Sockets成功地將JXTA隱藏起來(lái),使之看起來(lái)就像是傳統(tǒng)的TCP/IP網(wǎng)絡(luò)。假如peer想要成為服務(wù)器,他只需要簡(jiǎn)單的使用包含他們想使用的domain name和端口的P2P Server Socket就可以了。P2P的客戶端可以通過(guò)host名和特定的端口號(hào)來(lái)建立Socket連接訪問(wèn)那些服務(wù)。Host可以被解析為域名,例如www.nike.laborpolicy,或是IP地址,例如44.22.33.22。在這些場(chǎng)景之后,host實(shí)際被解析為JXTA原語(yǔ),而不是被解析為DNS或是TCP/IP。舉例來(lái)說(shuō):域名www.nike.laborpolicy實(shí)際上是JXTA peer group 的廣告消息中的一個(gè)NAME字段。P2P Sockets和Server socket 與正常的TCP/IP Socket和ServerSocket的使用方法完全相同。我們?yōu)橄M私鈨?nèi)幕和那些已經(jīng)懂得JXTA的用戶提供了一張表(http://www.onjava.com/onjava/2003/12/03/examples/table.Html),在這張表中可以查詢到傳統(tǒng)TCP/IP概念上的域名,IP地址等概念和JXTA中對(duì)等概念的對(duì)應(yīng)關(guān)系。
  
  使用這種方式的好處是多方面的。首先,程序員可以將他們?cè)跇?biāo)準(zhǔn)TCP/IP Socket和Server Socket的知識(shí)應(yīng)用到JXTA peer-to-peer網(wǎng)絡(luò)當(dāng)中而不需要專門學(xué)習(xí)JXTA。其次,所有的P2P Socket 的代碼都是標(biāo)準(zhǔn)java.net中類的子類,例如java.net.Socket,所以現(xiàn)存的網(wǎng)絡(luò)應(yīng)用可以很輕易的移植到peer-to-peer網(wǎng)絡(luò)當(dāng)中。 P2P Socket工程已經(jīng)將很多現(xiàn)存的軟件移植到了peer-to-peer網(wǎng)絡(luò)當(dāng)中,其中包括web服務(wù)器(Jetty),它可以接收請(qǐng)求,被在peer-to-peer 網(wǎng)絡(luò)上提供內(nèi)容服務(wù);一個(gè)servlet和JSP引擎(Jetty 和 Jsper),它可以使現(xiàn)存的servlet和JSP直接在P2P網(wǎng)絡(luò)中應(yīng)用;一個(gè)XML-RPC客戶端和服務(wù)器(Apache XML-RPC),它可以訪問(wèn)和對(duì)外提供P2P XML-RPC 端點(diǎn);一個(gè)HTTP/1.1客戶端(Apache Commons HTTP-Client),它可以訪問(wèn)P2P的web 服務(wù)器;一個(gè)網(wǎng)關(guān)(Smart Cache),它可以是現(xiàn)有瀏覽器訪問(wèn)P2P的P2P web 站點(diǎn);和WikiWiki(JSPWiki),它能夠在你的主機(jī)上建立Wiki站點(diǎn),使其他的Peer可以通過(guò)P2P網(wǎng)絡(luò)訪問(wèn),并編輯。所有的這些軟件在移植之后都能夠正常的使用并且和以前看起來(lái)完全一樣。P2P Socket的抽象非常的成功,移植這些軟件所花費(fèi)的時(shí)間僅僅是30分鐘到幾個(gè)小時(shí)不等。P2P Socket工程是完全開源的,大部分都采用BSD-type證書,由于是使用Java編寫的,所以也具有跨平臺(tái)的特性。
  
  由于P2P Socket是建立在JXTA之上的,所以它可以很輕易的處理一些傳統(tǒng)的ServerSocket和Socket所不能處理的情況。第一,在P2P Socket上建立的ServerSocket,具有fail-over(不知道怎么翻譯,應(yīng)該是可靠性之類的意思)和易擴(kuò)展的特性。假如不同的Peer可以啟動(dòng)ServerSocket使用同一個(gè)域名和端口,例如www.nike.laborpolicy 端口號(hào):80。當(dāng)一個(gè)客戶端打開P2P socket連接到www.nike.laborpolicy 端口號(hào):80時(shí),它會(huì)隨機(jī)的連接到一個(gè)提供一個(gè)使用這個(gè)域名和端口的主機(jī)上。所有的這些服務(wù)器Peer可能提供同樣的Web頁(yè)面,這就是可以將用戶的請(qǐng)求分布到不同的服務(wù)器之上同時(shí)也就使得某一個(gè)服務(wù)器的崩潰更輕易被恢復(fù)。這一點(diǎn)和DNS round-robin非常的相似,在DNS round-robin當(dāng)中一個(gè)域名可以被解析為多個(gè)IP地址用來(lái)進(jìn)行負(fù)載均衡。第二,由于P2P Socket并不使用DNS系統(tǒng),主機(jī)名可以任意指定。用戶可以建立他自己的個(gè)性結(jié)尾,例如www.boobah.cat 或是www.cynthia.goddess,或是應(yīng)用確定的名字,例如一個(gè)即使消息系統(tǒng)使用Brad GNUberg或是Fidget666當(dāng)作域名。第三,一個(gè)指定域名的服務(wù)端口可以分布在全世界很多的Peer當(dāng)中。舉例來(lái)說(shuō),假設(shè)你有一個(gè)虛擬主機(jī)名www.nike.laborpolicy,一個(gè)Peer可以在80端口提供web頁(yè)面,另一個(gè)Peer可以使用2000端口提供即時(shí)消息,最后一個(gè)Peer可以在3000端口為其他Peer提供即時(shí)的rss更新。現(xiàn)在一個(gè)域名可以由很多分布不同的Peer協(xié)同在一起提供服務(wù)。
  
  需求與配置
  
  要開發(fā)和使用P2P Socket你必須下載和安裝一下的這些軟件。
  
  ●JDK 1.4+
  
  P2P Socket只能工作在JDK 1.4或是更新版本的Java虛擬機(jī)之上,由于P2P Socket是Java.net.InetAddress的子類,在1.4之前,這個(gè)類是final類型的。
  
  ●Ant 1.5.3+
  
  用來(lái)構(gòu)建和運(yùn)行P2P Socket以及類似于Jetty 和 Jasper之類的擴(kuò)展
  
  ●P2PSockets-1.0-beta1.zip
  
  P2P Socket 的最新發(fā)布包
  
  安裝和配置好JDK和Ant,并保證它們都可以在命令行下正確運(yùn)行。將P2PSockets-1.0-beta1.zip解開到硬盤上。在目錄名當(dāng)中不能出現(xiàn)空格,否則P2P Sockets的構(gòu)建文件不能正常工作。
  
  必須將JAR文件p2psockets/lib/ant-contrib-0.5.jar加入到你的CLASSPATH當(dāng)中去。在Windows當(dāng)中可以使用下面這個(gè)命令:
  
  set CLASSPATH=%CLASSPATH%;c:/p2psockets/lib/ant-contrib-0.5.jar
  
  P2P Sockets的目錄包含兩個(gè)不同的子目錄,test/clientpeer和test/serverpeer,它們中有已經(jīng)設(shè)置好的JXTA配置信息(分別在test/clientpeer/.JXTA和test/serverpeer/.JXTA當(dāng)中)。假如你想要了解更多的關(guān)于JXTA的配置問(wèn)題,你可以閱讀JXTA配置指南。兩個(gè)測(cè)試peer已經(jīng)被配置為最差的情況下工作模式,也就是peer處在防火墻或是NAT設(shè)備之后,也就是說(shuō)用戶必須使用其他的中間Peer來(lái)中繼它們的請(qǐng)求。假如用戶不處在這種環(huán)境下,這種配置方式也是可以工作的。使用JXTA的一個(gè)好處就是,當(dāng)你在使用這個(gè)系統(tǒng)的時(shí)候,它對(duì)你的程序幾乎是透明的。
  
  當(dāng)你在測(cè)試本文中的代碼的時(shí)候,你必須連接到Internet。這樣做基于一下的兩個(gè)原因:首先,例子程序使用Sun提供的公共JXTA服務(wù)器來(lái)將啟動(dòng)peer引入JXTA網(wǎng)絡(luò)當(dāng)中;其次,在一些操作系統(tǒng)上(例如Windows xp, 缺省),網(wǎng)絡(luò)系統(tǒng)在你沒(méi)有連接到網(wǎng)絡(luò)上時(shí)會(huì)自動(dòng)關(guān)閉,這樣就會(huì)阻礙運(yùn)行在同一個(gè)主機(jī)上的客戶端peer和服務(wù)器peer互相通訊。
  
  建立一個(gè)P2P Server Socket
  
  建立一個(gè)P2P server Socket的方法和建立一個(gè)標(biāo)準(zhǔn)的java.net.Server

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新蔡县| 边坝县| 滨海县| 都兰县| 泗阳县| 南昌市| 和田市| 交口县| 丰顺县| 金沙县| 浦北县| 寿光市| 齐齐哈尔市| 嘉义县| 镇康县| 大田县| 永泰县| 改则县| 吉林市| 治县。| 威宁| 芜湖市| 天柱县| 高雄县| 和政县| 伊金霍洛旗| 塔城市| 扶余县| 潍坊市| 淮阳县| 卫辉市| 恩平市| 随州市| 江北区| 伊川县| 惠安县| 梧州市| 历史| 南投县| 东乌珠穆沁旗| 朔州市|