歡迎您光臨本站 註冊首頁

Peer-to-Peer Sockets 工程入門

←手機掃碼閱讀     火星人 @ 2014-03-10 , reply:0

  Peer-to-Peer (P2P)Sockets工程在JXTA peer-to-peer虛擬網路重新實現了對應於標準TCP/IP網路中的Java標準的Socket,ServerSocket,和InetAddress等類.該工程同時還引入了一些注入Jetty web server,Apache XML-RPC客戶端和伺服器庫,Apache Jasper JSP引擎之類的流行web package.使這些服務可以運行在Peer-to-Peer Sockets 的框架下.
  
  在這片文章結束的時候,你會理解對P2P Sockets packages的需求和以及開發它的動機,學會怎麼配置P2P Socket 庫使之在你的系統上能夠運行,學會怎麼樣建立P2P的伺服器和客戶端Socket,怎麼使用P2P的InetAddress 類,還包括框架下的安全問題以及它的局限性.
  
  動機
  
  P2P Socket工程的設計的使用對象是對以下幾個領域有興趣的開發者:
  
  ●將Internet回歸到end-to-end的原則當中
  
  ●一種繞過ICANN和Verisign的替代peer-to-peer域名系統,這個系統是完全分散式的,對更新擁有比標準DNS快的多的響應速度.
  
  ●一種任何人都可以建立活著使用網路服務的Internet,及時他們使用動態的IP地址或是沒有IP地址,或是只有內網地址(NAT),或者是在ISP的防火牆之後.
  
  ●一個每一個Peer都能夠自動的建立一個Web Server,提供XML-RPC服務,能夠快速的將這種服務提供給其他的Peer.
  
  ●使為Peer-to-Peer網路添加Java Socket和ServerSocket 的應用更加容易
  
  ●享受更酷的科技
  
  P2P Socket 工程在JXTA peer-to-peer網路上重新實現了標準java.net報當中的類.一些人可能要問「難道標準TCP/IP socket和ServerSocket不是已經是peer-to-peer的了嗎?」標準的TCP/IP socket和server socket在理論上是peer-to-peer的,不過由於防火牆,NAT設備,以及DNS所存在的政治或是技術的問題,在實際上卻沒有做到這一點.,Internet上的許多peer使用的都是通過DHCP協議取得的動態IP,這些IP由通過NAT設備共享和過濾,還有一些IP地址由於防火牆的限制,很難被訪問到.在這樣的條件下建立server socket應用要麼是不可能的,要麼就需要在應用層進行精妙的控制來繞過這些限制.其次,TCP/IP Socket依賴於DNS系統來將用戶友好的主機名轉變為IP地址.DNS在理論上就是辦分散式的,但是在管理層面上,DNS是在ICANN下集中式管理的,而ICANN是一個反應遲鈍的,沒有創新意識的組織.再次,標準的DNS對對那些過濾或是使用動態IP地址的edge-peer支持的並不好,更新需要花費很長的時間傳播下去並不提供presence信息.對那些想要開發能夠擴展DNS到新的領域(例如將即時消息的用戶名和存在信息加入到DNS)的新應用的開發者來說,DNS系統的技術和政治因素阻礙了他們的工作.


  
  JXTA是一個用於在TCP/IP之上建立peer-to-peer覆蓋網路的開源工程.在網路中的沒一個peer都會被分配到一個和IP地址類似的號碼,即時他們沒有固定的IP地址或是出在防火牆之後.在JXTA 網路上的super-peer通訊運行應用層的路由協議來儲存例如如果到達其他的peer,如何加入peer group,其他peer提供了怎麼樣的內容之類的信息.JXTA應用層在Peer之間提供了中繼的代理服務,是出在防火牆或是NAT后的Peer可以正常的通信.Peer可以自己組織成為Peer Group,這樣可以將所有的查詢請求限定在natural security container當中.任何peer都可以分散式的建立併發布一個peer group,其他的Peer通過使用其他的super-peer可以搜索並發現這些peer group.Peer之間的通信通過pipe的方式來進行,這和Unix系統當中的Pipe非常的類似.Pipe是對兩個peer之間通訊方式的一種抽象,它幫助peer互相通訊,即使他們處在不同的網路區域當中.
  
  JXTA是一種非常強大的框架.但是,它並不是一種容易學習的框架,將現有的軟體移植到JXTA下也不是一件容易的事情.P2P Sockets成功地將JXTA隱藏起來,使之看起來就像是傳統的TCP/IP網路.如果peer想要成為伺服器,他只需要簡單的使用包含他們想使用的domain name和埠的P2P Server Socket就可以了.P2P的客戶端可以通過host名和特定的埠號來建立Socket連接訪問那些服務.Host可以被解析為域名,例如www.nike.laborpolicy,或是IP地址,例如44.22.33.22.在這些場景之後,host實際被解析為JXTA原語,而不是被解析為DNS或是TCP/IP.舉例來說:域名www.nike.laborpolicy實際上是JXTA peer group 的廣告消息中的一個NAME欄位.P2P Sockets和Server socket 與正常的TCP/IP Socket和ServerSocket的使用方法完全相同.我們為希望了解內幕和那些已經懂得JXTA的用戶提供了一張表(http://www.onjava.com/onjava/2003/12/03/examples/table.html),在這張表中可以查詢到傳統TCP/IP概念上的域名,IP地址等概念和JXTA中對等概念的對應關係.
  
  使用這種方式的好處是多方面的.,程序員可以將他們在標準TCP/IP Socket和Server Socket的知識應用到JXTA peer-to-peer網路當中而不需要專門學習JXTA.其次,所有的P2P Socket 的代碼都是標準java.net中類的子類,例如java.net.Socket,現存的網路應用可以很容易的移植到peer-to-peer網路當中. P2P Socket工程已經將很多現存的軟體移植到了peer-to-peer網路當中,其中包括web伺服器(Jetty),它可以接收請求,被在peer-to-peer 網路上提供內容服務;一個servlet和JSP引擎(Jetty 和 Jsper),它可以使現存的servlet和JSP直接在P2P網路中應用;一個XML-RPC客戶端和伺服器(Apache XML-RPC),它可以訪問和對外提供P2P XML-RPC 端點;一個HTTP/1.1客戶端(Apache Commons HTTP-Client),它可以訪問P2P的web 伺服器;一個網關(Smart Cache),它可以是現有瀏覽器訪問P2P的P2P web 站點;和WikiWiki(JSPWiki),它能夠在你的主機上建立Wiki站點,使其他的Peer可以通過P2P網路訪問,並編輯.所有的這些軟體在移植之後都能夠正常的使用並且和以前看起來完全一樣.P2P Socket的抽象非常的成功,移植這些軟體所花費的時間僅僅是30分鐘到幾個小時不等.P2P Socket工程是完全開源的,大部分都採用BSD-type證書,由於是使用Java編寫的,也具有跨平台的特性.


  
  由於P2P Socket是建立在JXTA之上的,它可以很容易的處理一些傳統的ServerSocket和Socket所不能處理的情況.第一,在P2P Socket上建立的ServerSocket,具有fail-over(不知道怎麼翻譯,應該是可靠性之類的意思)和易擴展的特性.如果不同的Peer可以啟動ServerSocket使用同一個域名和埠,例如www.nike.laborpolicy 埠號:80.當一個客戶端打開P2P socket連接到www.nike.laborpolicy 埠號:80時,它會隨機的連接到一個提供一個使用這個域名和埠的主機上.所有的這些伺服器Peer可能提供同樣的Web頁面,這就是可以將用戶的請求分佈到不同的伺服器之上同時也就是的某一個伺服器的崩潰更容易被恢復.這一點和DNS round-robin非常的相似,在DNS round-robin當中一個域名可以被解析為多個IP地址用來進行負載均衡.第二,由於P2P Socket並不使用DNS系統,主機名可以任意指定.用戶可以建立他自己的個性結尾,例如www.boobah.cat 或是www.cynthia.goddess,或是應用確定的名字,例如一個即使消息系統使用Brad GNUberg或是Fidget666當作域名.第三,一個指定域名的服務埠可以分佈在全世界很多的Peer當中.舉例來說,假設你有一個虛擬主機名www.nike.laborpolicy,一個Peer可以在80埠提供web頁面,另一個Peer可以使用2000埠提供即時消息,一個Peer可以在3000埠為其他Peer提供即時的RSS更新.現在一個域名可以由很多分佈不同的Peer協同在一起提供服務.
  
  需求與配置
  
  要開發和使用P2P Socket你必須下載和安裝一下的這些軟體.
  
  ●JDK 1.4
  
  P2P Socket只能工作在JDK 1.4或是更新版本的Java虛擬機之上,由於P2P Socket是Java.net.InetAddress的子類,在1.4之前,這個類是final類型的.
  
  ●Ant 1.5.3
  
  用來構建和運行P2P Socket以及類似於Jetty 和 Jasper之類的擴展
  
  ●P2PSockets-1.0-beta1.zip
  
  P2P Socket 的最新發布包
  
  安裝和配置好JDK和Ant,並保證它們都可以在命令行下正確運行.將P2PSockets-1.0-beta1.zip解開到硬碟上.在目錄名當中不能出現空格,否則P2P Sockets的構建文件不能正常工作.
  
  必須將JAR文件p2psockets/lib/ant-contrib-0.5.jar加入到你的CLASSPATH當中去.在Windows當中可以使用下面這個命令:
  
  set CLASSPATH=%CLASSPATH%;c:p2psocketslibant-contrib-0.5.jar
  
  P2P Sockets的目錄包含兩個不同的子目錄,test/clientpeer和test/serverpeer,它們中有已經設置好的JXTA配置信息(分別在test/clientpeer/.JXTA和test/serverpeer/.JXTA當中).如果你想要了解更多的關於JXTA的配置問題,你可以閱讀JXTA配置指南.兩個測試peer已經被配置為最差的情況下工作模式,也就是peer處在防火牆或是NAT設備之後,也就是說用戶必須使用其他的中間Peer來中繼它們的請求.如果用戶不處在這種環境下,這種配置方式也是可以工作的.使用JXTA的一個好處就是,當你在使用這個系統的時候,它對你的程序幾乎是透明的.


  
  當你在測試本文中的代碼的時候,你必須連接到Internet.這樣做基於一下的兩個原因:,例子程序使用Sun提供的公共JXTA伺服器來將啟動peer引入JXTA網路當中;其次,在一些操作系統上(例如Windows XP, 預設),網路系統在你沒有連接到網路上時會自動關閉,這樣就會阻礙運行在同一個主機上的客戶端peer和伺服器peer互相通訊.
  
  建立一個P2P Server Socket
  
  建立一個P2P server Socket的方法和建立一個標準的java.net.Server


[火星人 ] Peer-to-Peer Sockets 工程入門已經有1088次圍觀

http://coctec.com/docs/java/show-post-62006.html