Peer
to
Peer (P
P)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 的框架下
在這片文章結束的時候
你會理解對P
P Sockets packages的需求和以及開發它的動機
學會怎麼配置P
P Socket 庫使之在你的系統上能夠運行
學會怎麼樣建立P
P的服務器和客戶端Socket
怎麼使用P
P的InetAddress 類
還包括框架下的安全問題以及它的局限性
動機 P
P 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 的應用更加容易
●享受更酷的科技
P
P Socket 工程在JXTA peer
to
peer網絡上重新實現了標准報當中的類
一些人可能要問
難道標准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下也不是一件容易的事情
P
P Sockets成功地將JXTA隱藏起來
使之看起來就像是傳統的TCP/IP網絡
如果peer想要成為服務器
他只需要簡單的使用包含他們想使用的domain name和端口的P
P Server Socket就可以了
P
P的客戶端可以通過host名和特定的端口號來建立Socket連接訪問那些服務
Host可以被解析為域名
例如www
nike
laborpolicy
或是IP地址
例如
在這些場景之後
host實際被解析為JXTA原語
而不是被解析為DNS或是TCP/IP
舉例來說
域名www
nike
laborpolicy實際上是JXTA peer group 的廣告消息中的一個NAME字段
P
P Sockets和Server socket 與正常的TCP/IP Socket和ServerSocket的使用方法完全相同
我們為希望了解內幕和那些已經懂得JXTA的用戶提供了一張表()
在這張表中可以查詢到傳統TCP/IP概念上的域名
IP地址等概念和JXTA中對等概念的對應關系
使用這種方式的好處是多方面的
首先
程序員可以將他們在標准TCP/IP Socket和Server Socket的知識應用到JXTA peer
to
peer網絡當中而不需要專門學習JXTA
其次
所有的P
P Socket 的代碼都是標准中類的子類
例如
Socket
所以現存的網絡應用可以很容易的移植到peer
to
peer網絡當中
P
P Socket工程已經將很多現存的軟件移植到了peer
to
peer網絡當中
其中包括web服務器(Jetty)
它可以接收請求
被在peer
to
peer 網絡上提供內容服務
一個servlet和JSP引擎(Jetty 和 Jsper)
它可以使現存的servlet和JSP直接在P
P網絡中應用
一個XML
RPC客戶端和服務器(Apache XML
RPC)
它可以訪問和對外提供P
P XML
RPC 端點
一個HTTP/
客戶端(Apache Commons HTTP
Client)
它可以訪問P
P的web 服務器
一個網關(Smart Cache)
它可以是現有浏覽器訪問P
P的P
P web 站點
和WikiWiki(JSPWiki)
它能夠在你的主機上建立Wiki站點
使其他的Peer可以通過P
P網絡訪問
並編輯
所有的這些軟件在移植之後都能夠正常的使用並且和以前看起來完全一樣
P
P Socket的抽象非常的成功
移植這些軟件所花費的時間僅僅是
分鐘到幾個小時不等
P
P Socket工程是完全開源的
大部分都采用BSD
type證書
由於是使用Java編寫的
所以也具有跨平台的特性
由於P
P Socket是建立在JXTA之上的
所以它可以很容易的處理一些傳統的ServerSocket和Socket所不能處理的情況
第一
在P
P Socket上建立的ServerSocket
具有fail
over(不知道怎麼翻譯
應該是可靠性之類的意思)和易擴展的特性
如果不同的Peer可以啟動ServerSocket使用同一個域名和端口
例如www
nike
laborpolicy 端口號
當一個客戶端打開P
P socket連接到www
nike
laborpolicy 端口號
時
它會隨機的連接到一個提供一個使用這個域名和端口的主機上
所有的這些服務器Peer可能提供同樣的Web頁面
這就是可以將用戶的請求分布到不同的服務器之上同時也就使得某一個服務器的崩潰更容易被恢復
這一點和DNS round
robin非常的相似
在DNS round
robin當中一個域名可以被解析為多個IP地址用來進行負載均衡
第二
由於P
P Socket並不使用DNS系統
主機名可以任意指定
用戶可以建立他自己的個性結尾
例如www
boobah
cat 或是www
cynthia
goddess
或是應用確定的名字
例如一個即使消息系統使用Brad GNUberg或是Fidget
當作域名
第三
一個指定域名的服務端口可以分布在全世界很多的Peer當中
舉例來說
假設你有一個虛擬主機名www
nike
laborpolicy
一個Peer可以在
端口提供web頁面
另一個Peer可以使用
端口提供即時消息
最後一個Peer可以在
端口為其他Peer提供即時的RSS更新
現在一個域名可以由很多分布不同的Peer協同在一起提供服務
需求與配置 要開發和使用P
P Socket你必須下載和安裝一下的這些軟件
●JDK
+
P
P Socket只能工作在JDK
或是更新版本的Java虛擬機之上
由於P
P Socket是
InetAddress的子類
在
之前
這個類是final類型的
●Ant
+
用來構建和運行P
P Socket以及類似於Jetty 和 Jasper之類的擴展
●P
PSockets
beta
zip
PP Socket 的最新發布包 安裝和配置好JDK和Ant
並保證它們都可以在命令行下正確運行
將P
PSockets
beta
zip解開到硬盤上
在目錄名當中不能出現空格
否則P
P Sockets的構建文件不能正常工作
必須將JAR文件p
psockets/lib/ant
contrib
jar加入到你的CLASSPATH當中去
在Windows當中可以使用下面這個命令
set CLASSPATH=%CLASSPATH%;c:\p
psockets\lib\ant
contrib
jar
P
P 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互相通訊
建立一個P
P Server Socket
建立一個P
P server Socket的方法和建立一個標准的
Server
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27323.html