日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JXTA Platform JAVA參考實現源代碼分析系列文章(2)

瀏覽:138日期:2024-06-30 16:28:20
內容: 1 引言管道的概念源于Unix,是不同線程之間直接傳輸數據的基本手段。JDK中java.io包中就有管道類,同時,管道在JXTA中是最基本的概念,是對等點之間的數據傳輸的主要方式。對等管道協議(PBP)明確規范了對等管道的綁定,解析,響應。本文依次剖析集中式(JDK)和對等環境下(JXTA)管道的實現方式,對比分析其異同,然后嘗試在JXTA中建立一個虛擬的全雙工的管道。本文的目標是通過對不同環境下管道的實現方式對比分析,來理解為什么JXTA采用管道作為基本的數據傳輸手段。2 管道的形象化描述一個生活中的情景:現在有兩個地區A,B。A是石油生產區,B是石油消費區,現在B地區需要消費A地區的石油,當然可以通過海運,空運獲得,然而最通常的方式是架設輸油管道。如圖所示: IMG http://www-900.cn.ibm.com/developerWorks/cn/java/l-jxta2/1.gif[/IMG] 內容: 引言 管道的形象化描述 集中式環境下管道的實現 JXTA對等管道的實現 案例描述 案例分析 如何去構建一個全雙工的對等管道 總結 參考資料 關于作者 Java 專區中還有: 教學 工具與產品 代碼與組件 所有文章 實用技巧 Project JXTA 中對等管道的構建 潘大為 (ppalas@sina.com)華中科技大學計算機學院2000級碩士研究生2002 年 7 月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)可以很好的解決這一問題。首先給出類圖如下。 IMG http://www-900.cn.ibm.com/developerWorks/cn/java/l-jxta2/2.gif[/IMG]下面是將類PipeOutputStream的connect方法代碼簡化后給予注釋。public synchronized void connect(PipedInputStream snk) throws IOException { sink = snk; //將PipeInputStream的實例作為PipeOutputStream的一個屬性,以便調用 snk.in = -1;//緩沖區的輸入位置, urn:jxta:uuid-59616261646162614A787461503250335003093E73074218AE3ABBE08EF3CBE303JxtaUnicastPipeExample 如果您需要對JXTA管道有實例化的概念,請參考Sing Li的使p2p能進行交互操作:Jxta命令shell ,這篇文章有部分內容專門介紹了如何在通過shell使用管道。本文主要是從編程的視角去看管道是如何實現的。4.1 客戶視角Project JXTA : Java Programmer's Guide Chapter7有個例子闡述如何去在對等點之間發送信息,讀者可以到www.jxta.org下載源碼。現在從客戶視角簡要的分析它的傳送原理,要深入的了解可以看下一節的系統視角分析。該例中,有兩個對等點,并且構建了兩個不同的類:一個負責接收(Pipelistener),一個負責發送(PipeExample)。具體的接收次序可以參考時序圖: IMG http://www-900.cn.ibm.com/developerWorks/cn/java/l-jxta2/3.gif[/IMG]類Pipelistener實現了接口PipeMsgListener,類PipeExample實現了接口OutputPipeListener。由時序圖(這是兩個JVM中的類,所以時序符號是獨立標示的)可以清晰的獲知,各個對等點的前1,2步是相互獨立的。各自的第3步,采用回調的方式建立輸入和輸出管道。一旦對等系統探測到對方的存在,就分別觸發各自的事件發送或接收消息。顯然JXTA中管道是異步的。調試該例程時,注意先建立輸入管道,然后建立輸出管道。因為,輸出管道在一定的時間和次數內探測不到輸入管道的存在,就會主動放棄。否則,容易讓網絡系統在這些無休止的探測中癱瘓。4.2 系統視角從上面的例程中,可以了解對等管道的創建方法,以及數據流程,但是不能明確對等系統是如何去實現的。JXTA中管道的實現比在JDK中實現要復雜得多,具體的技術標準可以參考對等管道綁定協議(PBP),此協議規范了JXTA中管道的概念,但并沒有涉及到如何去實現,這同樣是所有JXTA協議的特征。它們的目標是闡述what it is,而把how to do it留給開發者,這樣有利于增強系統的開放性。其中Java參考實現,就是該協議實現的一個案例,以下將具體分析。首先看管道實現的類圖(以單播為例): IMG http://www-900.cn.ibm.com/developerWorks/cn/java/l-jxta2/4.gif[/IMG]關鍵的類: InputPipeImpl :輸入管道的實現類 NonBlockingOutputPipe :輸出管道的實現類 PipeServiceImpl :管道服務的實現類,負責創建輸入輸出管道 PipeResolver :提供管道綁定的解析服務 通過客戶視角的分析,可以得知系統外部是通過PipeServiceImpl來獲取輸入輸出管道。那么消息是如何在對等系統中通過管道過濾和傳遞的? 從程序實現的角度,涉及到太多的技術細節,JXTA的參考實現中有著龐雜的監聽系統。本文嘗試用一個案例從兩個層次去解析這個問題,兩個層次分別是消息的具體形式,服務和端點協議的具體分發策略。很顯然,這里我們把注意力放在了管道的架構路徑上,而把如何去架構放在了一邊,我想它們是有先后關系的,并且距離并不遙遠。5 案例描述現在假設有兩個對等點alas 和sisal ,在一個局域網內,按照客戶視角那一節的例程sisal先建立輸入管道,alas建立輸出管道。由于同一網內可以用廣播的方式發送查詢信息,可以不設rendevous,并且路由是兩點間的,消息傳遞過程得到了一定的簡化。6 案例分析以上案例中,從輸入輸出管道的建立到完成對接并傳輸數據總共有5個步驟:sisal建立輸入管道 alasl建立輸出管道,需要查找輸入管道,通過廣播向網絡發出管道查詢消息 sisal獲得alas的管道查詢消息,通過單播向sisal發出響應表示 alas獲得sisal的響應,通過單播向alas發出數據 sisal獲得數據 6.1 輸入管道的建立sisal通過管道服務(pipeserviceImpl)創建輸入管道InputPipeImpl,并將自己注冊端點服務和管道解析服務中。6.2 輸出管道的建立alas通過管道服務,分析管道廣告,把自己注冊于管道服務和管道解析服務。然后轉交管道解析服務,查詢是否存在本地或緩存中,不存在則通過集中服務向網絡發送廣播。rendevous首先將廣播消息給端點服務,由端點服務決定用哪一個網絡協議,本案例中,端點服務采用TCP協議發送廣播。廣播消息的內容如下(消息是名稱,類型,內容構成的三元組,類型可以是xml也可以是二進制,以下列出的均用xml格式,所以省略了type)name=RendezVousPropagatecontent=<?xml version='1.0'?> jxta:RendezVousPropagateMessage> 7urn:jxta:uuid-DEADBEEFDEAFBABAFEEDBABE0000000205jxta-NetGroupOResurn:jxta:uuid-59616261646162614A78746150325033BFED264F86E14966B71A855134C813A5031023521770614 name=RendezVousPropagateurn:jxta:jxta-NetGroupcontent=<?xml version='1.0'?> jxta:RendezVousPropagateMessage> 7urn:jxta:uuid-DEADBEEFDEAFBABAFEEDBABE0000000205jxta-NetGroupORes urn:jxta:uuid-59616261646162614A78746150325033BFED264F86E14966B71A855134C813A5031023521770614 name=jxta-NetGroupORescontent=<?xml version='1.0'?> jxta:ResolverQuery> JxtaPipeResolver 0 urn:jxta:uuid-59616261646162614A78746150325033BFED264F86E14966B71A855134C813A503<?xml version='1.0'?> jxta:PipeResolver> Query urn:jxta:uuid-59616261646162614A757874614D504725184FBC4E5D498AA0919F662E40028B04 JxtaUnicast 6.3 響應查詢信息sisal的網絡端口監聽到alas的廣播消息,將消息轉發給端點服務處理。端點服務查詢了消息的內容,又轉發給集中服務,集中服務又將查詢的內容轉交解析服務處理,然后解析服務轉交給管道解析服務,此時發現本地注冊的廣告就是所要查詢的廣告,因此返回響應消息給了解析服務,然后有端點服務負責發送回應消息。響應的內容: <?xml version='1.0'?> jxta:PipeResolver> Answerurn:jxta:uuid-59616261646162614A757874614D504725184FBC4E5D498AA0919F662E40028B04JxtaUnicasturn:jxta:uuid-59616261646162614A7874615032503386E8880590814538A64682785564B9A603對等點廣告,內容較多,所以省略了 6.4 接收響應消息,發送數據alas的網絡端口收到sisal發送的響應消息,轉交端點服務,對路由信息處理以后轉交解析服務,然后到管道解析服務,發現注冊表中含有客戶端的事件(listener)。則觸發該事件發送數據。6.5 獲得數據sisal的網絡端口收到alas發送的數據,轉交端點服務,對路由信息處理以后,發現注冊表中含有客戶端的監聽事件,則觸發該事件分析數據。從下面的消息內容可以發現所得到的數據就是:Hello from peer alas獲得的消息如下name= jxta:EndpointSourceAddresscontent = tcp://192.168.0.58:9703/name= jxta:EndpointDestinationAddresscontent = tcp://192.168.0.58:9701/EndpointRouter/jxta-WorldGroupname = Jxta:EndpointRoutercontent = <?xml version='1.0'?> jxta:EndpointRouterMessage> jxta://uuid-59616261646162614A78746150325033A85AC96048BF4C5A98438038268F5E7003 jxta://uuid-59616261646162614A7874615032503386E8880590814538A64682785564B9A603/PipeService/urn:jxta:uuid-59616261646162614A757874614D504725184FBC4E5D498AA0919F662E40028B04 jxta://uuid-59616261646162614A78746150325033A85AC96048BF4C5A98438038268F5E7003 1 name = PipeListenerMsgcontent = Hello from peer alas6.6 小結從消息的傳遞與處理可以看出JXTA系統中,各個服務之間有著清晰的職責劃分。這樣的體系結構非常有利于提供給客戶透明的管道。相對于用戶而言,在JXTA使用管道和在集中式的環境下(Jdk)下的區別僅僅在于增加了管道的廣告來標示管道,而不需將輸入管道和輸出管道放在一起成對使用。從上面的案例中,還會發現如果用的是同一個管道廣告,可以有多個發送者一個接收者。這相比成對使用輸入輸出用途更廣。當然,JXTA還支持多對多的廣播管道,不過實現方式與單播不太一致,并且正在完善中。7 如何去構建一個全雙工的對等管道上述的例程中,A是信息的發送者,B是信息的接收者,信息單向傳輸。能否A,B既是發送者又是接受者呢?解決辦法很簡單,再建立一條從B到A的管道,然后將這兩條管道綁定在一起。JXTA的工具包net.jxta.impl.util含有BidirectionalPipeService類實現了這一目標。類圖如下: IMG http://www-900.cn.ibm.com/developerWorks/cn/java/l-jxta2/5.gif[/IMG]類圖下面的三個類和一個接口均是內部類。Pipe是一個封裝完好的雙向管道,建立管道的過程如下時序圖:(這一時序圖的視角是客戶對象A,B是如何外部連接的) IMG http://www-900.cn.ibm.com/developerWorks/cn/java/l-jxta2/6.gif[/IMG]以上時序圖中,A的accept()和B的connect()是一個異步操作,他們互相連通以后返回Pipe類的對象pipe。Pipe的inputPipe和outputPipe負責從對方獲取信息和向對方發送信息。它們互不干擾,當然同步性也沒有控制,很像實際生活中的IP電話。A的accept()和B的connect(),完成了A與B的兩次通信過程,建立了兩個獨立的管道其過程如下:(首先外部已建立了從B到A的臨時管道)A監聽B的信息 B創建輸入管道的廣告,以此產生輸入管道inputPipe,然后按消息name=inputPipeAdv將廣告發送出去 A收到B的消息,以inputPipeAdv的內容作為管道廣告,創建輸出管道outputPipe。然后創建輸入管道的廣告,以此產生輸入管道inputPipe,然后按消息name=inputPipeAdvAck將廣告發送出去 B收到A的消息,以inputPipeAdvAck的內容作為管道廣告,創建輸出管道outputPipe。 A,B均返回 new Pipe(inputPipe,outputPipe) 8 總結漫長的論述過程,完成了一個目標,弄明對等點A與B是如何通過管道通訊的。對于JXTA程序開發人員一個很重要的原則,就是明白自己的程序所在的協議層次,維護好JXTA協議的清晰的層次結構對于整個系統的可擴展和和可維護性均是至關重要的。管道在JXTA內部的構建過程,可以讓我們感覺到JXTA協議的職責在Java參考實現中有著明確的劃分。在復雜的對等環境中,對等點之間的有價值的通信是非常重要的,而如何通信又是一個很復雜的問題。管道服務提供了這種便捷的通信的抽象,留給服務的享受者只有三個概念:管道廣告,入口,出口。所以,我想這就是JXTA采用管道作為基本的數據傳輸手段的一個很重要的思想方式。參考文獻官方的 Jxta 社區位于 Jxta.org。您可在這里找到最新的規范、文檔、源代碼和二進制文件 在 developerWorks Java 技術專區查找更多 Java 參考資料。 Early Adopter JXTA 作者 Sing Li 關于作者:潘大為,華中科技大學計算機學院2000級碩士研究生,研究方向網絡對等計算,網絡信息系統。 Email: ppalas@sina.com Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
中文精品电影| 日本aⅴ精品一区二区三区 | 激情综合自拍| 久久婷婷激情| 成人欧美一区二区三区的电影| av日韩中文| 亚洲电影在线一区二区三区| 狠狠干综合网| 日韩不卡一区二区| 久久只有精品| 日韩大片在线观看| 在线综合欧美| 欧美日本一区| 日韩中文影院| 丝袜诱惑制服诱惑色一区在线观看| 涩涩涩久久久成人精品| 欧美91在线|欧美| 久久精品官网| 日韩一区二区三区四区五区| 国产日韩欧美中文在线| 国产精品99一区二区三| 日韩欧美午夜| 夜夜精品视频| 久久99蜜桃| 午夜日韩福利| 日韩精品五月天| 日本在线啊啊| 蜜桃av一区二区在线观看| 国产精品久久久一区二区| 激情亚洲影院在线观看| 亚洲欧美日本国产| 久久精品三级| 蜜桃成人av| 国产伦理一区| 精品网站aaa| 影音先锋久久| 国产精品hd| 欧美 日韩 国产精品免费观看| 日韩精品一级| 久久国产精品成人免费观看的软件| 另类中文字幕国产精品| **爰片久久毛片| 久久青草久久| 日韩三级精品| 日本在线精品| 国产精品调教| 国产精品av久久久久久麻豆网| 久久国际精品| 欧美专区18| 国产视频网站一区二区三区| 999久久久国产精品| 国产精品久久久一区二区| 伊人久久成人| 国产综合色区在线观看| 国产亚洲精aa在线看| 亚洲女同中文字幕| 福利在线一区| 欧美精品国产| 亚洲精品影院在线观看| 亚洲高清激情| 精品资源在线| 日韩高清在线观看一区二区| 婷婷精品视频| 久久久久久色 | 国产精品九九| 性色av一区二区怡红| 日本蜜桃在线观看视频| 久久av网址| 欧美日韩亚洲三区| 一本一道久久a久久| 女主播福利一区| 99久久精品国产亚洲精品| 国际精品欧美精品| 国产情侣久久| 日韩激情精品| 色综合视频一区二区三区日韩 | 国产第一亚洲| 国产日韩免费| 日本强好片久久久久久aaa| 中文国产一区| 欧美在线亚洲综合一区| 日韩精品欧美| 日韩在线看片| 日韩电影免费网站| 麻豆国产精品777777在线| 欧美日韩一区二区高清| 日本成人手机在线| 亚洲精品看片| 日韩欧美中文在线观看| 日韩在线观看中文字幕| 在线亚洲激情| 亚洲综合精品| 国产精品美女久久久| 午夜久久美女| 日韩中文字幕亚洲一区二区va在线| 亚洲自啪免费| 一级成人国产| 欧美日本二区| 久久精品国产99| 高清一区二区三区| 快播电影网址老女人久久| 久久久久久久久99精品大| 欧美成人午夜| 香蕉视频成人在线观看| 中文字幕一区二区av| 久久国产高清| 日韩在线观看一区二区三区| 久久国产日韩欧美精品| 国产精品久久久网站| 国产一区二区三区四区二区 | 国产美女高潮在线观看| 日韩高清欧美| 精品一区毛片| 亚洲开心激情| 国产亚洲精品美女久久久久久久久久| 国产精品三级| 欧美香蕉视频| 野花国产精品入口| 日韩高清在线不卡| 久久国产精品色av免费看| 高清一区二区| 婷婷精品进入| 69堂精品视频在线播放| 亚洲综合电影| 国产亚洲一级| 日本国产欧美| 国产精品成久久久久| 亚州av乱码久久精品蜜桃| 色狠狠一区二区三区| 黄色精品视频| 模特精品在线| 精品丝袜久久| 一本色道久久精品| 国产黄色一区| 亚洲福利久久| 久久国产乱子精品免费女| 日韩欧美看国产| 色8久久久久| 激情亚洲影院在线观看| 婷婷亚洲精品| 日本久久精品| 蜜桃av一区二区在线观看| 国产一区二区亚洲| 美国三级日本三级久久99| 国产99在线| 日本成人在线一区| 欧美成a人国产精品高清乱码在线观看片在线观看久| 欧美粗暴jizz性欧美20| 国产人成精品一区二区三| 久久精品国产久精国产爱| 在线视频精品| 成人台湾亚洲精品一区二区| 亚洲欧美专区| 亚洲特色特黄| 国产精品久久久久久模特| 好吊视频一区二区三区四区| 精品日产乱码久久久久久仙踪林| 视频一区二区三区在线| 日韩一区亚洲二区| 国产精品伊人| 日韩在线卡一卡二| 亚洲啊v在线| 国产另类在线| 亚洲乱码久久| 成人va天堂| 国产精品成人自拍| 中文字幕日韩亚洲| 亚洲一本视频| 综合日韩av| 国产精品国码视频| 综合视频一区| 999精品色在线播放| 麻豆精品视频在线观看| 日本中文字幕视频一区| 99国内精品| 九九精品调教| 黄色网一区二区| 国产麻豆一区| 日韩欧美三区| 在线精品视频在线观看高清| 国产一区二区三区国产精品 | 国产欧美综合一区二区三区| 中文一区一区三区免费在线观 | 国产91在线播放精品| 91麻豆精品激情在线观看最新 | 欧美a级一区二区| 丝瓜av网站精品一区二区| 久久精品123| 久久精品一区二区国产| 国产免费久久| 日韩高清在线不卡| 欧美特黄一区| 蜜臀国产一区| 91亚洲人成网污www| 日韩精品久久理论片| 麻豆91精品| 美美哒免费高清在线观看视频一区二区| 久久精品播放| 欧美香蕉视频| 久久精品国产大片免费观看|