熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Peer-to-Peer Sockets 工程入門

2013-11-23 19:42:00  來源: Java高級技術 

  PeertoPeer (PP)Sockets工程在JXTA peertopeer虛擬網絡重新實現了對應於標准TCP/IP網絡中的Java標准的SocketServerSocket和InetAddress等類該工程同時還引入了一些注入Jetty web serverApache XMLRPC客戶端和服務器庫Apache Jasper JSP引擎之類的流行web package使這些服務可以運行在PeertoPeer Sockets 的框架下
  
  在這片文章結束的時候你會理解對PP Sockets packages的需求和以及開發它的動機學會怎麼配置PP Socket 庫使之在你的系統上能夠運行學會怎麼樣建立PP的服務器和客戶端Socket怎麼使用PP的InetAddress 類還包括框架下的安全問題以及它的局限性
  
  動機
  
  PP Socket工程的設計的使用對象是對以下幾個領域有興趣的開發者
  
  ●將Internet回歸到endtoend的原則當中
  
  ●一種繞過ICANN和Verisign的替代peertopeer域名系統這個系統是完全分布式的對更新擁有比標准DNS快的多的響應速度
  
  ●一種任何人都可以建立活著使用網絡服務的Internet及時他們使用動態的IP地址或是沒有IP地址或是只有內網地址(NAT)或者是在ISP的防火牆之後
  
  ●一個每一個Peer都能夠自動的建立一個Web Server提供XMLRPC服務能夠快速的將這種服務提供給其他的Peer
  
  ●使為PeertoPeer網絡添加Java Socket和ServerSocket 的應用更加容易
  
  ●享受更酷的科技
  
  PP Socket 工程在JXTA peertopeer網絡上重新實現了標准報當中的類一些人可能要問難道標准TCP/IP socket和ServerSocket不是已經是peertopeer的了嗎?標准的TCP/IP socket和server socket在理論上是peertopeer的不過由於防火牆NAT設備以及DNS所存在的政治或是技術的問題在實際上卻沒有做到這一點首先Internet上的許多peer使用的都是通過DHCP協議取得的動態IP這些IP由通過NAT設備共享和過濾還有一些IP地址由於防火牆的限制很難被訪問到在這樣的條件下建立server socket應用要麼是不可能的要麼就需要在應用層進行精妙的控制來繞過這些限制其次TCP/IP Socket依賴於DNS系統來將用戶友好的主機名轉變為IP地址DNS在理論上就是辦分布式的但是在管理層面上DNS是在ICANN下集中式管理的而ICANN是一個反應遲鈍的沒有創新意識的組織再次標准的DNS對對那些過濾或是使用動態IP地址的edgepeer支持的並不好更新需要花費很長的時間傳播下去而且並不提供presence信息對那些想要開發能夠擴展DNS到新的領域(例如將即時消息的用戶名和存在信息加入到DNS)的新應用的開發者來說DNS系統的技術和政治因素阻礙了他們的工作
  
  JXTA是一個用於在TCP/IP之上建立peertopeer覆蓋網絡的開源工程在網絡中的沒一個peer都會被分配到一個和IP地址類似的號碼即時他們沒有固定的IP地址或是出在防火牆之後在JXTA 網絡上的superpeer通訊運行應用層的路由協議來儲存例如如果到達其他的peer如何加入peer group其他peer提供了怎麼樣的內容之類的信息JXTA應用層在Peer之間提供了中繼的代理服務是出在防火牆或是NAT後的Peer可以正常的通信Peer可以自己組織成為Peer Group這樣可以將所有的查詢請求限定在natural security container當中任何peer都可以分布式的建立並發布一個peer group其他的Peer通過使用其他的superpeer可以搜索並發現這些peer groupPeer之間的通信通過pipe的方式來進行這和Unix系統當中的Pipe非常的類似Pipe是對兩個peer之間通訊方式的一種抽象它幫助peer互相通訊即使他們處在不同的網絡區域當中
  
  JXTA是一種非常強大的框架但是它並不是一種容易學習的框架將現有的軟件移植到JXTA下也不是一件容易的事情PP Sockets成功地將JXTA隱藏起來使之看起來就像是傳統的TCP/IP網絡如果peer想要成為服務器他只需要簡單的使用包含他們想使用的domain name和端口的PP Server Socket就可以了PP的客戶端可以通過host名和特定的端口號來建立Socket連接訪問那些服務Host可以被解析為域名例如wwwnikelaborpolicy或是IP地址例如在這些場景之後host實際被解析為JXTA原語而不是被解析為DNS或是TCP/IP舉例來說域名wwwnikelaborpolicy實際上是JXTA peer group 的廣告消息中的一個NAME字段PP Sockets和Server socket 與正常的TCP/IP Socket和ServerSocket的使用方法完全相同我們為希望了解內幕和那些已經懂得JXTA的用戶提供了一張表()在這張表中可以查詢到傳統TCP/IP概念上的域名IP地址等概念和JXTA中對等概念的對應關系
  
  使用這種方式的好處是多方面的首先程序員可以將他們在標准TCP/IP Socket和Server Socket的知識應用到JXTA peertopeer網絡當中而不需要專門學習JXTA其次所有的PP Socket 的代碼都是標准中類的子類例如Socket所以現存的網絡應用可以很容易的移植到peertopeer網絡當中 PP Socket工程已經將很多現存的軟件移植到了peertopeer網絡當中其中包括web服務器(Jetty)它可以接收請求被在peertopeer 網絡上提供內容服務一個servlet和JSP引擎(Jetty 和 Jsper)它可以使現存的servlet和JSP直接在PP網絡中應用一個XMLRPC客戶端和服務器(Apache XMLRPC)它可以訪問和對外提供PP XMLRPC 端點一個HTTP/客戶端(Apache Commons HTTPClient)它可以訪問PP的web 服務器一個網關(Smart Cache)它可以是現有浏覽器訪問PP的PP web 站點和WikiWiki(JSPWiki)它能夠在你的主機上建立Wiki站點使其他的Peer可以通過PP網絡訪問並編輯所有的這些軟件在移植之後都能夠正常的使用並且和以前看起來完全一樣PP Socket的抽象非常的成功移植這些軟件所花費的時間僅僅是分鐘到幾個小時不等PP Socket工程是完全開源的大部分都采用BSDtype證書由於是使用Java編寫的所以也具有跨平台的特性
  
  由於PP Socket是建立在JXTA之上的所以它可以很容易的處理一些傳統的ServerSocket和Socket所不能處理的情況第一在PP Socket上建立的ServerSocket具有failover(不知道怎麼翻譯應該是可靠性之類的意思)和易擴展的特性如果不同的Peer可以啟動ServerSocket使用同一個域名和端口例如wwwnikelaborpolicy 端口號當一個客戶端打開PP socket連接到wwwnikelaborpolicy 端口號它會隨機的連接到一個提供一個使用這個域名和端口的主機上所有的這些服務器Peer可能提供同樣的Web頁面這就是可以將用戶的請求分布到不同的服務器之上同時也就使得某一個服務器的崩潰更容易被恢復這一點和DNS roundrobin非常的相似在DNS roundrobin當中一個域名可以被解析為多個IP地址用來進行負載均衡第二由於PP Socket並不使用DNS系統主機名可以任意指定用戶可以建立他自己的個性結尾例如wwwboobahcat 或是wwwcynthiagoddess或是應用確定的名字例如一個即使消息系統使用Brad GNUberg或是Fidget當作域名第三一個指定域名的服務端口可以分布在全世界很多的Peer當中舉例來說假設你有一個虛擬主機名wwwnikelaborpolicy一個Peer可以在端口提供web頁面另一個Peer可以使用端口提供即時消息最後一個Peer可以在端口為其他Peer提供即時的RSS更新現在一個域名可以由很多分布不同的Peer協同在一起提供服務
  
  需求與配置
  
  要開發和使用PP Socket你必須下載和安裝一下的這些軟件
  
  ●JDK +
  
  PP Socket只能工作在JDK 或是更新版本的Java虛擬機之上由於PP Socket是InetAddress的子類之前這個類是final類型的
  
  ●Ant +
  
  用來構建和運行PP Socket以及類似於Jetty 和 Jasper之類的擴展
  
  ●PPSocketsbetazip
  
  PP Socket 的最新發布包
  
  安裝和配置好JDK和Ant並保證它們都可以在命令行下正確運行將PPSocketsbetazip解開到硬盤上在目錄名當中不能出現空格否則PP Sockets的構建文件不能正常工作
  
  必須將JAR文件ppsockets/lib/antcontribjar加入到你的CLASSPATH當中去在Windows當中可以使用下面這個命令
  
  set CLASSPATH=%CLASSPATH%;c:\ppsockets\lib\antcontribjar
  
  PP 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互相通訊
  
  建立一個PP Server Socket
  
  建立一個PP server Socket的方法和建立一個標准的Server
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27323.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.