亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JXTA Platform JAVA參考實現源代碼分析(2)

2019-11-18 12:18:27
字體:
來源:轉載
供稿:網友

  1 引言
  管道的概念源于Unix,是不同線程之間直接傳輸數據的基本手段。JDK中java.io包中就有管道類,同時,管道在JXTA中是最基本的概念,是對等點之間的數據傳輸的主要方式。對等管道協議(PBP)明確規范了對等管道的綁定,解析,響應。
  
  本文依次剖析集中式(JDK)和對等環境下(JXTA)管道的實現方式,對比分析其異同,然后嘗試在JXTA中建立一個虛擬的全雙工的管道。
  
  本文的目標是通過對不同環境下管道的實現方式對比分析,來理解為什么JXTA采用管道作為基本的數據傳輸手段。
  
  2 管道的形象化描述
  一個生活中的情景:現在有兩個地區A,B。A是石油生產區,B是石油消費區,現在B地區需要消費A地區的石油,當然可以通過海運,空運獲得,然而最通常的方式是架設輸油管道。如圖所示:
  
 JXTA Platform JAVA參考實現源代碼分析(2)(圖一)

  
  1 引言
  管道的概念源于Unix,是不同線程之間直接傳輸數據的基本手段。JDK中java.io包中就有管道類,同時,管道在JXTA中是最基本的概念,是對等點之間的數據傳輸的主要方式。對等管道協議(PBP)明確規范了對等管道的綁定,解析,響應。
  
  本文依次剖析集中式(JDK)和對等環境下(JXTA)管道的實現方式,對比分析其異同,然后嘗試在JXTA中建立一個虛擬的全雙工的管道。
  
  本文的目標是通過對不同環境下管道的實現方式對比分析,來理解為什么JXTA采用管道作為基本的數據傳輸手段。
  
  2 管道的形象化描述
  一個生活中的情景:現在有兩個地區A,B。A是石油生產區,B是石油消費區,現在B地區需要消費A地區的石油,當然可以通過海運,空運獲得,然而最通常的方式是架設輸油管道。如圖所示:
  
  java中流的概念和管道的概念都可以通過此案例闡述,A與B之間連接的就是管道,負責將A的石油向B輸出。A向管道輸出數據(output),B從管道輸入數據(input),可以這樣理解,管道是A的輸出對象,是B的數據源。這里就產生了三個類:輸出流A,輸入流B,管道。輸入流B負責如何獲取數據(read 操作),輸出流A負責如何消費數據(write操作),管道負責連接它們(connect 操作)。其實,在實現時,管道類分解為管道口,管道出口,由入口出口負責連接。在復雜的網絡環境中,這種連接方式可以有專門的網絡協議負責(例如,JXTA中的PBP,全稱Pipe Bind PRotocol)。
  
  由以上描述,我們可以清楚知道最原始的管道就是單向的,文章后面介紹的雙向管道,是用兩個單向管道虛擬的,而非真實的連接方式。不難發現管道最要害的問題是如何協調輸出(A)與輸入(B)。這在不同的網絡環境會碰到不同的問題,最簡單的是同一JVM下的不同過程(線程或任務)之間用同步方式傳遞數據。而對等環境下,如何去發現對方就是一個很現實的問題,這僅僅只是問題的其中之一,下面的章節會依次分析。
  
  3 集中式環境下管道的實現
  問題的描述:A與B是在同一JVM中,A,B有一方能夠發現另一方的存在,A將數據發往B方,A發送數據與B接收數據是相互獨立的。
  
  現在回到問題的最初:為什么要使用管道?A只管發送,B只管接受,那么數據在哪兒呢?經過下面的分析,就會明白管道把治理數據緩沖區的重任交給了他自己,A,B均是圍繞這個緩沖區來啟停線程的,顯然這才是問題的本質。
  
  JDK中,類PipeInputStream(即前面所述的B)與PipeOutputStream(即前面所述的的A)可以很好的解決這一問題。首先給出類圖如下。
  
 JXTA Platform JAVA參考實現源代碼分析(2)(圖二)

  下面是將類PipeOutputStream的connect方法代碼簡化后給予注釋。
  
  public synchronized void connect(PipedInputStream snk) throws IOException {
   sink = snk; //將PipeInputStream的實例作為PipeOutputStream的一個屬性,以便調用
   snk.in = -1;//緩沖區的輸入位置,<0表示緩沖區為空
   snk.out = 0;//緩沖區的輸出位置
  snk.connected = true;
  }
  
  連接以后,PipeOutputStream的write操作直接調用sink.receive(b);這樣,對緩沖區buffer的維護,就變成了read()和receive()操作之間的線程同步。JDK對緩沖區的處理非常巧妙,采用了循環列表,它用緩沖區的標志位的變化來代替數據的移動,類似于生活中的時鐘把線性的時間規范為24小時來表示。這不屬于本文的論述范圍,就不繼續分析了。
  
  read操作,正常情況下,從out位置讀取數據。緩沖區空時進入等待狀態。以輪詢的方式(1秒間隔)來自我釋放。
  
  receive操作,正常情況下,向in位置寫入數據。緩沖區滿時進入等待狀態。同樣,以輪詢的方式(1秒間隔)來自我釋放。
  
  4 JXTA對等管道的實現
  通過對JDK的分析,我們可以了解到在集中式環境下,管道的架設方案是比較簡單的。在對等環境下(分布式環境下也類似),出于同樣的目標,碰到的問題卻在急劇的擴大。例如,管道入口和出口之間如何相互發現?數據如何保證在不同的環境下傳送?甚至,對管道本身的概念發生質疑:一定是單入口,單出口嗎?
  
  JXTA規范中,管道是在端點之上的服務或應用之間發送和接收信息的虛擬連接通道,管道提供在對等端點傳輸之上的網絡抽象。管道有點到點和廣播兩種通信模式。
  
  JXTA是通過管道廣告來唯一標示管道的,輸出管道要找到與其廣告相同的輸入管道才能發送數據,廣告內容如下
  
  <!DOCTYPE jxta:PipeAdvertisement>
  <jxta:PipeAdvertisement XMLns:jxta="http://jxta.org";>
   <Id>
  urn:jxta:uuid-59616261646162614A787461503250335003093E73074218AE3ABBE08EF3CBE303
   </Id>
   <Type>
   JxtaUnicast
   </Type>
   <Name>
   PipeExample
   </Name>
  </jxta:PipeAdvertisement>
  
  假如您需要對JXTA管道有實例化的概念,請參考Sing Li的使p2p能進行交互操作:Jxta命令shell ,這篇文章有部分內容專門介紹了如何在通過shell使用管道。本文主要是從編程的視角去看管道是如何實現的。
  
  4.1 客戶視角
  
  Project JXTA : Java Programmer's Guide Chapter7有個例子闡述如何去在對等點之間發送信息,讀者可以到www.jxta.org下載源碼?,F在從客戶視角簡要的分析它的傳送原理,要深入的了解可以看下一節的系統視角分析。
  
  該例中,有兩個對等點,并且構建了兩個不同的類:一個負責接收(Pipelistener),一個負責發送(PipeExample)。具體的接收次序可以參考時序圖:
  
 JXTA Platform JAVA參考實現源代碼分析(2)(圖三)

  類Pipelistener實現了接口PipeMsgListener,類PipeExample實現了接口OutputPipeListener。
  
  由時序圖(這是兩個JVM中的類,所以時序符號是獨立標示的)可以清楚的獲知,各個對等點的前1,2步是相互獨立的。各自的第3步,采用回調的方式建立輸入和輸出管道。一旦對等系統探測到對方的存在,就分別觸發各自的事件發送或接收消息。顯然JXTA中管道是異步的。
  
  調試該例程時,注重先建立輸入管道,然后建立輸出管道。因為,輸出管道在一定的時間和次數內探測不到輸入管道的存在,就會主動放棄。否則,輕易讓網絡系統在這些無休止的探測中癱瘓。
  
  4.2 系統視角
  
  從上面的例程中,可以了解對等管道的創建方法,以及數據流程,但是不能明確對等系統是如何去實現的。JXTA中管道的實現比在JDK中實現要復雜得多,具體的技術標準可以參考對等管道綁定協議(PBP),此協議規范了JXTA中管道的概念,但并沒有涉及到如何去實現,這同樣是所有JXTA協議的特征。它們的目標是闡述what it is,而把how to do it留給開發者,這樣有利于增強系統的開放性。其中Java參考實現,就是該協議實現的一個案例,以下將具體分析。
  
  首先看管道實現的類圖(以單播為例):
  
 JXTA Platform JAVA參考實現源代碼分析(2)(圖四)

  要害的類:
  
   InputPipeImpl :輸入管道的實現類
   NonBlockingOutputPipe :輸出管道的實現類
   PipeServiceImpl :管道服務的實現類,負責創建輸入輸出管道
   PipeResolver :提供管道綁定的解析服務
   
  通過客戶視角的分析,可以得知系統外部是通過PipeServiceImpl來獲取輸入輸出管道。那么消息是如何在對等系統中通過管道過濾和傳遞的? 從程序實現的角度,涉及到太多的技術細節,JXTA的參考實現中有著龐雜的監聽系統。本文嘗試用一個案例從兩個層次去解析這個問題,兩個層次分別是消息的具體形式,服務和端點協議的具體分發策略。很顯然,這里我們把注重力放在了管道的架構路徑上,而把如何去架構放在了一邊,我想它們是有先后關系的,并且距離并不遙遠。
  
  5 案例描述
  現在假設有兩個對等點alas 和sisal ,在一個局域網內,按照客戶視角那一節的例程sisal先建立輸入管道,alas建立輸出管道。由于同一網內可以用廣播的方式發送查詢信息,可以不設rendevous,并且路由是兩點間的,消息傳遞過程得到了一定的簡化。
  
  6 案例分析
  以上案例中,從輸入輸出管道的建立到完成對接并傳輸數據總共有5個步驟:
  
  sisal建立輸入管道
  alasl建立輸出管道,需要查找輸入管道,通過廣播向網絡發出管道查詢消息
  sisal獲得alas的管道查詢消息,通過單播向sisal發出響應表示
  alas獲得sisal的響應,通過單播向alas發出數據
  sisal獲得數據
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久av| 国产精品看片资源| 青草热久免费精品视频| 91久久精品在线| 亚洲欧美国产日韩天堂区| 色久欧美在线视频观看| 欧美性videos高清精品| 夜夜嗨av色一区二区不卡| 精品动漫一区二区| 亚洲综合在线小说| 久久69精品久久久久久久电影好| 色老头一区二区三区在线观看| 青草热久免费精品视频| 日韩在线观看免费高清| 91久久精品日日躁夜夜躁国产| 日韩免费观看在线观看| 欧美日韩福利在线观看| 亚洲精品国产精品国产自| 中文字幕在线成人| 福利微拍一区二区| 久久久影视精品| 97在线看免费观看视频在线观看| www.美女亚洲精品| 国产亚洲成精品久久| 成人av电影天堂| 国产小视频91| 亚洲韩国欧洲国产日产av| 国产亚洲视频在线观看| 这里只有精品在线播放| 国产一区二区三区在线播放免费观看| 91极品视频在线| 午夜精品一区二区三区在线播放| 午夜精品久久久久久久99黑人| 亚洲网站在线观看| 粗暴蹂躏中文一区二区三区| 欧美在线观看网站| 亚洲性生活视频| 亚洲在线一区二区| 最近的2019中文字幕免费一页| 美日韩精品免费观看视频| 亚洲天堂男人天堂| 久久久久久一区二区三区| 在线亚洲欧美视频| 久久精彩免费视频| 国产免费一区二区三区在线能观看| 91国自产精品中文字幕亚洲| 久久夜精品香蕉| 九九热最新视频//这里只有精品| 国产精品自拍视频| 亚洲成人久久网| 色婷婷av一区二区三区在线观看| 91社区国产高清| 国产欧美久久久久久| 亚洲精品99久久久久| 中文字幕av一区二区三区谷原希美| 国产精品视频一| 欧美亚洲视频在线观看| 久久天天躁狠狠躁夜夜躁| 欧美国产日韩中文字幕在线| 国产日韩欧美视频| 国产成人在线亚洲欧美| 国产精品三级美女白浆呻吟| 久久精品亚洲94久久精品| 日韩欧美在线播放| 久久久久亚洲精品国产| 亚洲欧美一区二区三区四区| 日本不卡高字幕在线2019| 亚洲国内精品视频| 国产在线拍偷自揄拍精品| 久久精品中文字幕免费mv| 午夜精品久久久久久久白皮肤| 欧美电影免费观看高清完整| 亚洲精品一区中文字幕乱码| 日韩av在线影院| 亚洲第一区中文99精品| 国产精品91在线| 日韩精品视频在线| 国产成人av网址| 欧美成人三级视频网站| 久久精品国产亚洲精品2020| 日韩性生活视频| 91久久综合亚洲鲁鲁五月天| 亚洲精品动漫久久久久| 成人激情视频在线播放| 欧美精品一区二区三区国产精品| 91在线免费网站| 欧美日韩福利视频| 狠狠久久五月精品中文字幕| 亚洲乱码一区av黑人高潮| 亚洲国产日韩欧美综合久久| 久久视频免费在线播放| 国产精品com| 欧美黑人性生活视频| 亚洲福利视频免费观看| 久久久久久久久久久国产| 久久久国产精品亚洲一区| 精品在线欧美视频| 亚洲网在线观看| 色综合色综合久久综合频道88| 久久久最新网址| 国产在线视频一区| 成人性生交大片免费看小说| 日韩欧美中文字幕在线观看| 91久久国产精品91久久性色| 日韩精品视频在线观看免费| 久久天天躁狠狠躁夜夜爽蜜月| 日韩欧美中文字幕在线播放| 精品无码久久久久久国产| 日韩黄在线观看| 国内精品视频一区| 国外成人性视频| 欧美精品日韩www.p站| 亚洲a级在线播放观看| 国产午夜精品理论片a级探花| 欧美日韩ab片| 在线视频欧美性高潮| 日韩精品福利网站| 欧美性猛交xxxx乱大交极品| 久久天天躁狠狠躁夜夜躁| 欧美日韩亚洲成人| 精品福利樱桃av导航| 欧美日韩国产区| 91精品国产成人| 久久人人爽人人爽人人片亚洲| 中文字幕日韩精品在线观看| 97在线日本国产| 亚洲香蕉av在线一区二区三区| 在线播放精品一区二区三区| 亚洲高清久久久久久| 在线视频精品一| 亚洲成人黄色网| 在线观看欧美日韩| 精品亚洲一区二区| 亚洲最新在线视频| 日韩中文字幕在线观看| 国产精品久久久久9999| 色999日韩欧美国产| 亚洲区在线播放| 日韩在线一区二区三区免费视频| 成人免费淫片aa视频免费| 日韩网站在线观看| 欧美乱妇高清无乱码| 4444欧美成人kkkk| 成人黄色在线观看| 欧美一级淫片aaaaaaa视频| 成人欧美一区二区三区在线湿哒哒| 日本电影亚洲天堂| 日韩av资源在线播放| 亚洲色图日韩av| 主播福利视频一区| 亚洲精品在线91| 亚洲国产欧美在线成人app| 亚洲成人久久久久| 久久精品久久精品亚洲人| 国产精品美女www爽爽爽视频| 欧美性猛交xxx| 亚洲最新av在线| 欧美成人激情视频免费观看| 国产精品日韩在线一区| 日本老师69xxx| 国产日本欧美一区二区三区在线| 久久久久久美女| 久久久这里只有精品视频| 欧美黄色www|