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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

5、給另外一個(gè)peer,接受的一方計(jì)算在這2個(gè)邊界數(shù)中的質(zhì)數(shù),返回到以前的peer net.jxta.endpoint.Message 類(lèi) 概括出一個(gè)消息的感念,它允許賦予任何一個(gè)消息集一個(gè)鍵(KEY)。我們將在下表中用鍵-值 來(lái)表示這個(gè)類(lèi)的實(shí)例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. 服務(wù)的定義與發(fā)現(xiàn)下一步,我們必須定義一個(gè)讓主程序找到從屬程序的方法,換句話(huà)說(shuō),我

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

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

9、,然后將它們傳遞到一個(gè)僅產(chǎn)生質(zhì)數(shù)鏈表的組件中。 當(dāng)那個(gè)組件返回了結(jié)果(一個(gè)含質(zhì)數(shù)的數(shù)組),這個(gè)質(zhì)數(shù)查訊服務(wù)將產(chǎn)生一個(gè)包含結(jié)果的消息并將此消息送回客戶(hù)端。在最先的反復(fù)中,服務(wù)將簡(jiǎn)單地打印出它接受到的消息。接下來(lái)的提煉中,它將打開(kāi)一個(gè)管道將結(jié)果送回客戶(hù)端??蛻?hù)端將把這些從各個(gè)peer中得到的結(jié)果組合起來(lái)并將最后的數(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論