監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 甲方項(xiàng)目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉

對P2P應(yīng)用程序開發(fā)框架的研究

申請免費(fèi)試用、咨詢電話:400-8352-114

  1概述

  P2P應(yīng)用程序以一種分布的方式管理和組織位于互聯(lián)網(wǎng)邊緣的各種資源。位于互聯(lián)網(wǎng)邊緣的通常都是一些聯(lián)網(wǎng)的普通PC。在傳統(tǒng)的C/S網(wǎng)絡(luò)模式下,普通PC作為客戶端,通過向位于Intemet中的各種服務(wù)器發(fā)送請求來完成一些任務(wù)。相反在P2P模式下,普通PC直接與互聯(lián)網(wǎng)中成千上萬臺計(jì)算機(jī)相連,實(shí)現(xiàn)信息和數(shù)據(jù)的共享。因?yàn)榕c用戶計(jì)算機(jī)相連的各種計(jì)算機(jī)資源的聯(lián)網(wǎng)狀態(tài)是不穩(wěn)定的,所以P2P協(xié)議被設(shè)計(jì)為可以在不穩(wěn)定的聯(lián)網(wǎng)和動態(tài)的 地址的情況下實(shí)現(xiàn)網(wǎng)絡(luò)操作的一種通訊規(guī)則。

  P2P應(yīng)用程序的開發(fā)要比C/s應(yīng)用程序的開發(fā)復(fù)雜一些。在P2P系統(tǒng)中,所有的計(jì)算機(jī)(節(jié)點(diǎn))都運(yùn)行相同的程序。開發(fā)P2P應(yīng)用程序要解決如下一些問題:

  (1)聯(lián)通性:如何找到和連接其他的P2P節(jié)點(diǎn),這些節(jié)點(diǎn)通常不具有固定IP;(2)消息路由:消息如何從一個節(jié)點(diǎn)路由到另一個節(jié)點(diǎn),源節(jié)點(diǎn)與目標(biāo)節(jié)點(diǎn)之間互相都不知道對方的位置;(3)搜索:如何從網(wǎng)絡(luò)節(jié)點(diǎn)中找到需要的信息;(4)安全:在這方面存在很多的問題,包括節(jié)點(diǎn)如何信任其它節(jié)點(diǎn)等。

  本文將會針對開發(fā)P2P應(yīng)用程序的相關(guān)問題提出一個簡單的P2P應(yīng)用程序開發(fā)框架。

  2 P2P應(yīng)用程序開發(fā)框架基本結(jié)構(gòu)

  該P(yáng)2P應(yīng)用程序開發(fā)框架的基本結(jié)構(gòu)如圖1所示,在該圖中也演示了網(wǎng)絡(luò)節(jié)點(diǎn)之間相互通訊的全部過程。

  在節(jié)點(diǎn)中運(yùn)行的P2P應(yīng)用程序向用戶提供了一個界面,并且運(yùn)行了一個用于監(jiān)聽從其它節(jié)點(diǎn)發(fā)來的連接請求的主循環(huán)。用戶可以單擊節(jié)點(diǎn)A圖形界面中的一個按鈕(比如搜索按鈕),與該按鈕相關(guān)的程序就會向節(jié)點(diǎn)B發(fā)出“Query“消息,請求與節(jié)點(diǎn)B建立連接。節(jié)點(diǎn)B的主循環(huán)檢測到節(jié)點(diǎn)A發(fā)出的連接請求后,會啟動一個單獨(dú)的線程來處理這個請求。一旦節(jié)點(diǎn)A與節(jié)點(diǎn)B建立了連接,節(jié)點(diǎn)A就會向節(jié)點(diǎn)B發(fā)送包含了真正要處理數(shù)據(jù)的消息,節(jié)點(diǎn)B中的相應(yīng)線程就會接收消息并向節(jié)點(diǎn)A發(fā)出回復(fù),然后關(guān)閉與節(jié)點(diǎn)A的連接,再根據(jù)節(jié)點(diǎn)A發(fā)送給自己的消息類型,調(diào)用相應(yīng)的消息處理函數(shù)處理該消息。處理完消息中包含的數(shù)據(jù)之后,節(jié)點(diǎn)B會主動連接節(jié)點(diǎn)A,并向節(jié)點(diǎn)A發(fā)出“Query Response”的消息。

  3核心模塊

  上述P2P節(jié)點(diǎn)之間的數(shù)據(jù)通訊功能是基于一個簡單的開發(fā)框架實(shí)現(xiàn)的,該框架中包括除用戶界面之外的兩個重要的功能模塊。

  3.1節(jié)點(diǎn)模塊

  節(jié)點(diǎn)模塊管理著網(wǎng)絡(luò)節(jié)點(diǎn)的全部操作功能。該模塊包含一個用于監(jiān)聽連接請求和啟動消息處理線程的主循環(huán)。借助該框架進(jìn)行P2P應(yīng)用開發(fā)的程序員可以在節(jié)點(diǎn)模塊中注冊新的消息處理句柄(函數(shù)或方法),該模塊中的主循環(huán)會根據(jù)節(jié)點(diǎn)接收到的消息類型分配相應(yīng)的消息處理句柄進(jìn)行消息的處理。一個網(wǎng)絡(luò)節(jié)點(diǎn)啟動初始化時(shí)會提供一個監(jiān)聽連接請求的端口,一個IP地址以及一個節(jié)點(diǎn)標(biāo)識符。

  節(jié)點(diǎn)模塊也維護(hù)著一個已知節(jié)點(diǎn)列表,該列表的大小是有限制的,節(jié)點(diǎn)可以通過標(biāo)識符或者在列表中的順序位置來訪問這些已知節(jié)點(diǎn)。

  除了存儲各種不同類型消息的處理句柄之外,節(jié)點(diǎn)模塊還存儲了程序員編寫的用來決定如何路由消息的函數(shù)。節(jié)點(diǎn)模塊也能以固定間隔允許固定的操作程序。

  3.2節(jié)點(diǎn)連接模塊

  節(jié)點(diǎn)連接模塊封裝了用于連接其它節(jié)點(diǎn)的套接字。該框架使用TCP/IP協(xié)議在節(jié)點(diǎn)之間進(jìn)行通訊。節(jié)點(diǎn)連接模塊提供了可以讓程序員非常容易發(fā)送和接收消息的各種方法,這些方法保證了消息的編碼格式的正確。另外,節(jié)點(diǎn)連接模塊也可以偵測到P2P數(shù)據(jù)傳輸過程中出現(xiàn)的各種錯誤。

  該框架中定義的消息包含一個8字節(jié)長度的消息頭,該消息頭中有4個字節(jié)用來存放消息的類型標(biāo)識,另外4字節(jié)用來存放一個表示消息中數(shù)據(jù)長度的整數(shù)。4字節(jié)的消息類型標(biāo)識可以被看作是字符串。因此,程序員可以用自定義的長度為4-T-節(jié)的字符串來標(biāo)識各種不同的消息類型。當(dāng)節(jié)點(diǎn)中的主循環(huán)接收到消息后,它就會根據(jù)消息類型將消息分配給正確的處理句柄。消息句柄是一個可以接收節(jié)點(diǎn)連接模塊對象引用和消息類型的函數(shù),句柄可以根據(jù)消息類型被注冊。目前,該框架被設(shè)計(jì)為一個消息僅對應(yīng)一個句柄對象的1:1模式。當(dāng)節(jié)點(diǎn)模塊接收到一個連接請求時(shí),它就會建立一個節(jié)點(diǎn)連接模塊對象,該對象讀取其它節(jié)點(diǎn)發(fā)來的消息類型,啟動一個線程處理消息中的數(shù)據(jù),當(dāng)消息句柄完成它的任務(wù)后,節(jié)點(diǎn)連接自動關(guān)閉。

  4結(jié)語

  P2P應(yīng)用程序的開發(fā)難度較大,借助于框架技術(shù)可以大大簡化開發(fā)過程,提高開發(fā)效率。本文提出的這個簡單的開發(fā)框架對P2P應(yīng)用程序的開發(fā)起到了一定的改進(jìn)作用。

發(fā)布:2007-03-11 10:28    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:
軟件產(chǎn)品
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費(fèi)獲取試用系統(tǒng)

QQ在線咨詢