P編程技術(shù)b例程b1_第1頁
P編程技術(shù)b例程b1_第2頁
P編程技術(shù)b例程b1_第3頁
P編程技術(shù)b例程b1_第4頁
P編程技術(shù)b例程b1_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、JXTA P2P編程技術(shù)例程(1)作者:yxiong2000 | 日期:2004-07-30 | 字體:大 中 小 在這個例子中,我們會設計和編寫一個分布式JXTA應用,可以解決并行計算問題。我們將用一個反復使用的形式建立這個應用,在每步中擴大它的能力和 使用到的API集。這些原代碼只能覆蓋最重要的部分,需要全部代碼可以到網(wǎng)站上查詢一些大型計算問題的子集可以用并行的方法解決。一個工作的并行執(zhí)行意味著你可以將一個問題分解為幾個小的子問題, 這些子問題又可以被同時的被執(zhí)行。當一個子問題結(jié)束后,它將返回自己的結(jié)果到主程序,主程序?qū)⑦@些返回的小結(jié)果組合為更大的答案。舉個例子,考慮將任何2個整數(shù)間的質(zhì)數(shù)

2、列出來的工作。質(zhì)數(shù)就是那些只能被它自己和1整除的自然數(shù)。 那些可以被1和其他比自己小的數(shù)整除的叫合數(shù)。因此,最簡單的方法產(chǎn)生一個質(zhì)數(shù)列表就是在自然數(shù)列表中消除所有的合數(shù),剩余的就是質(zhì)數(shù)了。這個方法反復消除一系列自然數(shù)中的合數(shù)。它將列表中的每個數(shù)都用2到它的平方根去除。如果任何一個數(shù)被這樣除了之后沒有余數(shù),那么這個數(shù)就是合數(shù),并且對它作上標記。 當這些反復(工作)結(jié)束了之后,所有的被標記的數(shù)將被消除,剩下的就是質(zhì)數(shù)了。但是如果是一個很長的列表,有數(shù)百萬的長度,那么我們將它分為幾個小一點的列表,然后對每個列表執(zhí)行上述方法。每個子計算被分發(fā)到網(wǎng)絡上不同的機器去執(zhí)行,充分利用分布的計算資源。質(zhì)數(shù)的查詢

3、是這些可以被并行分解的大型問題集中的一個,現(xiàn)在流行的P2P風格的軟件有不少,比如SETIHOME工程,它的目標是對來自外太空的信號解碼,尋找外星智能生物,類似的工程還有讓用戶共享出他們空閑CPU的資源去模擬蛋白質(zhì)的折疊或者解碼DNA串。在這個應用中,主程序?qū)⑾蛴脩粽埱?個數(shù),然后產(chǎn)生一個在2數(shù)之間包含所以質(zhì)數(shù)的數(shù)列。這個主程序?qū)⑹紫仍贘XTA網(wǎng)絡上嘗試找到提供質(zhì)數(shù)查詢服務的的其他peer,然后將列表的片段分發(fā)給它們?nèi)?zhí)行。當一個peer完成了它的那一部分,它將返回這個片段中質(zhì)數(shù)的數(shù)組。為了這樣的分配能夠進行,我們要讓所有peer能夠在網(wǎng)絡上通告(advertise)它具備質(zhì)數(shù)查詢的能力以讓其他

4、的peer可以找到并連接它。JXTA Application Design可能這個應用最不平常的一個方面就是,每個peer既扮演主程序(master process)的角色和一個從屬程序的角色(slave),也有可能一個從屬程序還要決定是否進一步的分解這個問題到的子任務。這種服務模式/客戶模式操作是P2P程序設計的實質(zhì)。我們將它定義為SM/CM操作消息定義當我們設計一個JXTA程序的時候,我們必須忍受JXTA是一個基于消息的系統(tǒng):2個peer中的主要協(xié)議(contract)主要是通過消息。這樣,設計程序的第一個工作就是定義消息傳遞。在這個質(zhì)數(shù)查詢應用中,一個peer傳遞一條包含2個邊界數(shù)的消息

5、給另外一個peer,接受的一方計算在這2個邊界數(shù)中的質(zhì)數(shù),返回到以前的peer net.jxta.endpoint.Message 類 概括出一個消息的感念,它允許賦予任何一個消息集一個鍵(KEY)。我們將在下表中用鍵-值 來表示這個類的實例Table 16.1. Request Message Key Value ServiceConstants.LOW_INT Lower boundary of the (sub)list ServiceConstants.HIGH_INT Upper boundary of the (sub)list Table 16.2. Response Messa

6、ge Key Value ServiceConstants.LOW_INT Lower boundary of the (sub)list ServiceConstants.HIGH_INT Upper boundary of the (sub)list ServiceConstants.PRIMELIST A string containing all primes between the bounds of the list. The primes are separated by ; characters. 服務的定義與發(fā)現(xiàn)下一步,我們必須定義一個讓主程序找到從屬程序的方法,換句話說,我

7、們比如讓peer預先了解到提供這個服務的其他peer。就象早先提及的那樣,一個JXTA服務是用它的module類和specification定義的。因此, 我們將為這個質(zhì)數(shù)查詢服務module和specification定義一個通告. 然后讓一個peer提供一個讓這些通告在JXTA網(wǎng)絡中傳播的服務。這個質(zhì)數(shù)查詢module類將采用JXTACLASS:com.sams.p2p.primecruncher這個名字,module的spec將采用the name JXTASPEC:com.sams.p2p.primecruncher這個名字主程序?qū)⒂眠@個名字去發(fā)現(xiàn)通告module的說明。因此, 除了消

8、息的定義, 服務名字字符串也是peer在設計階段應該獲取的信息。所有 peer交互的信息將在運行的時候被發(fā)現(xiàn)。服務實現(xiàn)當一個質(zhì)數(shù)查詢服務開始的時候,它將初始化JXTA平臺以得到去World and Net Peer Group的通道。當初始化只后,peer將創(chuàng)造并發(fā)布它的通告,包括它的module類和module說明通告。模板說明通告將包含一個管道通告。 那些發(fā)現(xiàn)有此服務的一個模板說明通告的客戶端必須得到這個管道通告,并且通過這個管道連接到那個服務。發(fā)布了通告之后,我們的服務打開一個輸入通道并且對進來的消息進行監(jiān)聽。當一個消息到達之后,這個服務嘗試從這個消息中獲得high與low這2個邊界數(shù)字

9、,然后將它們傳遞到一個僅產(chǎn)生質(zhì)數(shù)鏈表的組件中。 當那個組件返回了結(jié)果(一個含質(zhì)數(shù)的數(shù)組),這個質(zhì)數(shù)查訊服務將產(chǎn)生一個包含結(jié)果的消息并將此消息送回客戶端。在最先的反復中,服務將簡單地打印出它接受到的消息。接下來的提煉中,它將打開一個管道將結(jié)果送回客戶端。客戶端將把這些從各個peer中得到的結(jié)果組合起來并將最后的數(shù)列存入文件中。.Listing 16.2 Outline of PrimePeer and Initialization of a JXTA Peerpackage primecruncher;import net.jxta.peergroup.PeerGroup;import net.

10、jxta.peergroup.PeerGroupFactory;import net.jxta.peergroup.PeerGroupID;import net.jxta.discovery.DiscoveryService;import net.jxta.pipe.PipeService;import net.jxta.pipe.InputPipe;import net.jxta.pipe.PipeID;import net.jxta.exception.PeerGroupException;import tocol.ModuleClassAdvertisement;

11、import tocol.ModuleSpecAdvertisement;import tocol.PipeAdvertisement;import net.jxta.document.*;import net.jxta.platform.ModuleClassID;import net.jxta.platform.ModuleSpecID;import net.jxta.id.IDFactory;import net.jxta.endpoint.Message;import java.io.FileInputStream;import java

12、.io.IOException;import java.io.FileOutputStream;import java.io.StringWriter;public class PrimePeer private static PeerGroup group; private static DiscoveryService discoSvc; private static PipeService pipeSvc; private InputPipe inputPipe; private static final String PIPE_ADV_FILE = primeserver_pipe.a

13、dv; public static void main(String argv) PrimePeer pp = new PrimePeer(); pp.startJxta(); pp.doAdvertise(); pp.startService(); public PrimePeer() private void startJxta() try group = PeerGroupFactory.newNetPeerGroup(); discoSvc = group.getDiscoveryService(); pipeSvc = group.getPipeService(); catch (P

14、eerGroupException e) System.out.println(Cannot create Net Peer Group: + e.getMessage(); System.exit(-1); /* * Create and propagate advertisements */ private void doAdvertise() . /* * Start up the service, listen for incoming messages on the services input pipe. */ private void startService() . /* * Compute the requested list of prime numbers. */ private void processInput(String high, St

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論