專(zhuān)利名稱:在p2p流媒體系統(tǒng)中查找活動(dòng)節(jié)點(diǎn)的方法、系統(tǒng)及設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及P2P技術(shù),尤其涉及一種在P2P流媒體系統(tǒng)中查找活動(dòng)節(jié)點(diǎn)的方法、系 統(tǒng)及設(shè)備。
背景技術(shù):
點(diǎn)對(duì)點(diǎn)(Peer-to-Peer,P2P)系統(tǒng)以其良好的可擴(kuò)展性、健壯性,成為開(kāi)展流媒體 業(yè)務(wù)的理想平臺(tái)。在基于追蹤設(shè)備的P2P (Tracker-based P2P)系統(tǒng)中存在大量的追蹤設(shè) 備(Tracker),針對(duì)不同的播放頻道,每個(gè)Tracker緩存與對(duì)應(yīng)的數(shù)據(jù)相關(guān)的節(jié)點(diǎn)的IP地 址、端口等節(jié)點(diǎn)信息,新加入P2P流媒體系統(tǒng)的節(jié)點(diǎn)也需要向Tracker上報(bào)自身的IP地址、 端口等節(jié)點(diǎn)信息。已加入P2P流媒體系統(tǒng)的節(jié)點(diǎn)可以向Tracker發(fā)送節(jié)點(diǎn)列表請(qǐng)求 (Peerlistrequest),表示希望從其他節(jié)點(diǎn)中下載數(shù)據(jù)。發(fā)送Peerlist請(qǐng)求的節(jié)點(diǎn)稱之為 請(qǐng)求節(jié)點(diǎn),為該請(qǐng)求節(jié)點(diǎn)提供下載數(shù)據(jù)的節(jié)點(diǎn)稱之為活動(dòng)節(jié)點(diǎn)。在現(xiàn)有的Tracker-based P2P系統(tǒng)中,請(qǐng)求節(jié)點(diǎn)查找活動(dòng)節(jié)點(diǎn)的過(guò)程如圖1所示,主要包括如下步驟第一步請(qǐng)求節(jié)點(diǎn)(Peer_l)向Tracker發(fā)送Peerlist請(qǐng)求,Tracker根據(jù)已緩存 的節(jié)點(diǎn)信息選擇多個(gè)節(jié)點(diǎn),并將選擇的多個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)信息寫(xiě)入Peerlist列表后,返回給 請(qǐng)求節(jié)點(diǎn)。在本步驟中,Tracker可以根據(jù)已緩存的節(jié)點(diǎn)信息確定對(duì)應(yīng)的節(jié)點(diǎn),并從中隨機(jī)選 擇一定數(shù)量的節(jié)點(diǎn),也可以根據(jù)地理位置接近的原則,選擇與請(qǐng)求節(jié)點(diǎn)位置比較接近的節(jié) 點(diǎn)。例如,如果根據(jù)請(qǐng)求節(jié)點(diǎn)的IP地址確定請(qǐng)求節(jié)點(diǎn)歸屬區(qū)域?yàn)楸本┑貐^(qū),則Tracker可 以根據(jù)已緩存的IP地址選擇歸屬區(qū)域是北京地區(qū)的節(jié)點(diǎn),如圖1中選擇Peer_2、Peer_3, Peer_4 禾口 Peer_5。第二步請(qǐng)求節(jié)點(diǎn)接收到Peerlist列表后,向Peerlist列表中的節(jié)點(diǎn)發(fā)送探測(cè)信 息,以確定活動(dòng)節(jié)點(diǎn)。在P2P流媒體系統(tǒng)中,一個(gè)播放文件被劃分為若干個(gè)子塊,播放文件以子塊為單 元在節(jié)點(diǎn)之間傳輸,節(jié)點(diǎn)通過(guò)比特圖(bitmap)來(lái)表示自身緩存子塊的情況。bitmap中的每 一個(gè)bit都與一個(gè)子塊對(duì)應(yīng),如果節(jié)點(diǎn)緩存了某個(gè)子塊,那么bitmap中與該子塊對(duì)應(yīng)的bit 位被置為“1”;反之,該bit位置為“0”。在本步驟中,請(qǐng)求節(jié)點(diǎn)首先向Peerlist列表中的某 一節(jié)點(diǎn)發(fā)送探測(cè)信息,如Peer_l向Peer_2發(fā)送探測(cè)信息,查詢Peer_2的連接能力,以及在 Peer_2有能力作為Peer_l的活動(dòng)節(jié)點(diǎn)時(shí),Peer_l與Peer_2間交換自身的bitmap,獲知對(duì) 方緩存子塊的情況。Peer_2根據(jù)接收到的bitmap判斷自身緩存的子塊能否提供給Peer_l, 如果可以,則向Peer_l發(fā)送成功響應(yīng)信息,成為請(qǐng)求節(jié)點(diǎn)的活動(dòng)節(jié)點(diǎn);否則,向Peer_l發(fā)送 失敗響應(yīng)信息。另外,請(qǐng)求節(jié)點(diǎn)與Peerlist列表中的節(jié)點(diǎn)還可以相互交換Peerlist列表,用于擴(kuò) 大活動(dòng)節(jié)點(diǎn)的搜索范圍。通過(guò)以上兩步,請(qǐng)求節(jié)點(diǎn)完成了對(duì)活動(dòng)節(jié)點(diǎn)的查找過(guò)程,進(jìn)而可以執(zhí)行第三步請(qǐng)求節(jié)點(diǎn)Peer_l從活動(dòng)節(jié)點(diǎn)Peer_2處下載數(shù)據(jù),準(zhǔn)備播放視頻。在現(xiàn)有的Tracker-based P2P系統(tǒng)中查找活動(dòng)節(jié)點(diǎn)的方式下,由于Tracker僅僅 知曉可選的各節(jié)點(diǎn)中,每個(gè)節(jié)點(diǎn)的IP地址、端口等節(jié)點(diǎn)信息,因此,PeerliSt列表中節(jié)點(diǎn) 可能是緩存的可用子塊較少的節(jié)點(diǎn),導(dǎo)致請(qǐng)求節(jié)點(diǎn)需要分別向列表中每個(gè)節(jié)點(diǎn)發(fā)送探測(cè)信 息,導(dǎo)致請(qǐng)求節(jié)點(diǎn)可能需要占用大量通信資源查找合適的活動(dòng)節(jié)點(diǎn),浪費(fèi)通信資源。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種在P2P流媒體系統(tǒng)中查找活動(dòng)節(jié)點(diǎn)的方法、系統(tǒng)、Tracker 設(shè)備以及節(jié)點(diǎn)設(shè)備,以解決在查找活動(dòng)節(jié)點(diǎn)的過(guò)程中,由于Tracker選擇的節(jié)點(diǎn)可能是緩 存的可用子塊較少的節(jié)點(diǎn),導(dǎo)致請(qǐng)求節(jié)點(diǎn)需要向Peerlist列表中各節(jié)點(diǎn)發(fā)送探測(cè)信息以 查找合適的活動(dòng)節(jié)點(diǎn),導(dǎo)致通信資源浪費(fèi)的問(wèn)題。一種在P2P流媒體系統(tǒng)中查找活動(dòng)節(jié)點(diǎn)的方法,由可選節(jié)點(diǎn)向追蹤設(shè)備Tracker 上報(bào)緩存的連續(xù)子塊的個(gè)數(shù)以及所述連續(xù)子塊中第一個(gè)子塊的序號(hào);所述查找活動(dòng)節(jié)點(diǎn)的方法包括Tracker接收請(qǐng)求節(jié)點(diǎn)發(fā)送的節(jié)點(diǎn)列表請(qǐng)求后,根據(jù)節(jié)點(diǎn)列表請(qǐng)求中包含的請(qǐng)求 節(jié)點(diǎn)待下載數(shù)據(jù)的起始子塊序號(hào),選擇多個(gè)可選節(jié)點(diǎn)作為候選節(jié)點(diǎn),其中,候選節(jié)點(diǎn)中緩存 了所述待下載數(shù)據(jù)的起始子塊;Tracker將候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn),指示所述請(qǐng)求節(jié) 點(diǎn)根據(jù)節(jié)點(diǎn)列表中的節(jié)點(diǎn)信息確定至少一個(gè)候選節(jié)點(diǎn)作為活動(dòng)節(jié)點(diǎn)。一種在P2P流媒體系統(tǒng)中查找活動(dòng)節(jié)點(diǎn)的系統(tǒng),所述系統(tǒng)包括請(qǐng)求節(jié)點(diǎn)、可選節(jié) 點(diǎn)禾口 Tracker,其中可選節(jié)點(diǎn),用于向Tracker上報(bào)緩存的連續(xù)子塊的個(gè)數(shù)以及所述連續(xù)子塊中第一 個(gè)子塊的序號(hào);請(qǐng)求節(jié)點(diǎn),用于向Tracker發(fā)送節(jié)點(diǎn)列表請(qǐng)求,并根據(jù)Tracker返回的節(jié)點(diǎn)列表中 的節(jié)點(diǎn)信息,確定至少一個(gè)候選節(jié)點(diǎn)作為活動(dòng)節(jié)點(diǎn);Tracker,用于在接收到節(jié)點(diǎn)列表請(qǐng)求后,根據(jù)節(jié)點(diǎn)列表請(qǐng)求中包含的請(qǐng)求節(jié)點(diǎn)待 下載數(shù)據(jù)的起始子塊序號(hào),選擇多個(gè)可選節(jié)點(diǎn)作為候選節(jié)點(diǎn),其中,候選節(jié)點(diǎn)中緩存了所述 待下載數(shù)據(jù)的起始子塊,并將選擇的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)。一種追蹤設(shè)備,應(yīng)用于P2P流媒體系統(tǒng)中,所述追蹤設(shè)備包括請(qǐng)求接收模塊,用于接收節(jié)點(diǎn)列表請(qǐng)求,所述節(jié)點(diǎn)列表請(qǐng)求中包含的請(qǐng)求節(jié)點(diǎn)待 下載數(shù)據(jù)的起始子塊序號(hào);信息接收模塊,用于接收可選節(jié)點(diǎn)上報(bào)的緩存的連續(xù)子塊的個(gè)數(shù)以及所述連續(xù)子 塊中第一個(gè)子塊的序號(hào);第一選擇模塊,用于根據(jù)待下載數(shù)據(jù)的起始子塊序號(hào),選擇多個(gè)可選節(jié)點(diǎn)作為候 選節(jié)點(diǎn),其中,候選節(jié)點(diǎn)中緩存了所述待下載數(shù)據(jù)的起始子塊;列表發(fā)送模塊,用于將選擇的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)
點(diǎn)ο一種節(jié)點(diǎn)設(shè)備,所述節(jié)點(diǎn)設(shè)備包括信息上報(bào)模塊,用于向Tracker上報(bào)緩存的連續(xù)子塊的個(gè)數(shù)以及所述連續(xù)子塊中第一個(gè)子塊的序號(hào);數(shù)據(jù)輸出模塊,用于根據(jù)其他節(jié)點(diǎn)設(shè)備的請(qǐng)求向其他節(jié)點(diǎn)設(shè)備上載數(shù)據(jù)。由于本發(fā)明方案中,Tracker預(yù)先接收到可選節(jié)點(diǎn)緩存的連續(xù)子塊的個(gè)數(shù)以及所 述連續(xù)子塊中第一個(gè)子塊的序號(hào),使得Tracker通過(guò)接收占用少量字節(jié)的信息就能夠獲知 可選節(jié)點(diǎn)的可用子塊信息,進(jìn)而在根據(jù)請(qǐng)求節(jié)點(diǎn)請(qǐng)求的待下載數(shù)據(jù)的起始子塊序號(hào)選擇候 選節(jié)點(diǎn)時(shí),保證選擇的候選節(jié)點(diǎn)中緩存待下載數(shù)據(jù)的起始子塊,因此,請(qǐng)求節(jié)點(diǎn)在從候選節(jié) 點(diǎn)中確定活動(dòng)節(jié)點(diǎn)時(shí),無(wú)需向每個(gè)候選節(jié)點(diǎn)探測(cè)是否具有待下載數(shù)據(jù)的起始子塊序號(hào),避 免了通信資源的浪費(fèi),減少了帶寬消耗。
圖1為現(xiàn)有的查找活動(dòng)節(jié)點(diǎn)示意圖;圖2為本發(fā)明實(shí)施例一中P2P流媒體系統(tǒng)中查找活動(dòng)節(jié)點(diǎn)的方法示意圖;圖3為本發(fā)明實(shí)施例中節(jié)點(diǎn)bitmap示意圖;圖4為本發(fā)明實(shí)施例五中P2P流媒體系統(tǒng)中查找活動(dòng)節(jié)點(diǎn)的系統(tǒng)示意圖;圖5為本發(fā)明實(shí)施例六中追蹤設(shè)備示意圖;圖6為本發(fā)明實(shí)施例七中節(jié)點(diǎn)設(shè)備示意圖。
具體實(shí)施例方式為了實(shí)現(xiàn)本發(fā)明目的,本發(fā)明對(duì)系統(tǒng)中的可選節(jié)點(diǎn)和Tracker進(jìn)行了改造,使可 選節(jié)點(diǎn)向Tracker上報(bào)自身緩存子塊的可用性信息,Tracker在接收到請(qǐng)求節(jié)點(diǎn)發(fā)送的 節(jié)點(diǎn)列表請(qǐng)求后,并不是盲目地將系統(tǒng)中的可選節(jié)點(diǎn)作為請(qǐng)求節(jié)點(diǎn)備選的活動(dòng)節(jié)點(diǎn),而是 根據(jù)可選節(jié)點(diǎn)緩存子塊的可用性信息對(duì)可選節(jié)點(diǎn)進(jìn)行選擇,保證選擇出的節(jié)點(diǎn)緩存請(qǐng)求 節(jié)點(diǎn)最急需的子塊,從而消除了請(qǐng)求節(jié)點(diǎn)通過(guò)向Peerlist中的節(jié)點(diǎn)發(fā)送探測(cè)消息來(lái)確定 Peerlist中的節(jié)點(diǎn)是否具有最急需的子塊的過(guò)程,避免了通信資源的浪費(fèi),減少了帶寬消
^^ ο本發(fā)明實(shí)施例中涉及的Tracker可以是在現(xiàn)有Tracker的基礎(chǔ)上改造后的設(shè)備, 也可以是具有本發(fā)明實(shí)施例需要的相關(guān)功能的設(shè)備。下面結(jié)合說(shuō)明書(shū)附圖對(duì)本發(fā)明實(shí)施例進(jìn)行詳細(xì)描述。如圖2所示,為本發(fā)明實(shí)施例一中查找活動(dòng)節(jié)點(diǎn)的方法步驟示意圖,所述方法包 括以下步驟步驟101 可選節(jié)點(diǎn)向Tracker上報(bào)自身緩存的連續(xù)子塊的個(gè)數(shù)以及所述連續(xù)子 塊中第一個(gè)子塊的序號(hào)。當(dāng)前接入Tracker的節(jié)點(diǎn)可以作為可選節(jié)點(diǎn)。P2P系統(tǒng)中的可選節(jié)點(diǎn)需要周期性地或?qū)崟r(shí)地向Tracker上報(bào)自身緩存子塊的 相關(guān)信息,如上報(bào)自身緩存的各子塊的位置,也就是上報(bào)在哪些時(shí)刻子塊對(duì)應(yīng)的bit位置 為“ 1 ”,在哪些時(shí)刻子塊對(duì)應(yīng)的bit位置為“0”。但是,考慮到將bit位的全部信息上報(bào)給 Tracker時(shí)需要占用大量的字節(jié),消耗過(guò)多的資源,因此,本發(fā)明實(shí)施例一中,可選節(jié)點(diǎn)將自 身緩存的連續(xù)子塊的個(gè)數(shù)以及所述連續(xù)子塊中第一個(gè)子塊的序號(hào)上報(bào)給Tracker。如圖3所示,分別為本發(fā)明實(shí)施例中請(qǐng)求節(jié)點(diǎn)和某一個(gè)可選節(jié)點(diǎn)的bitmap示意圖,假設(shè)兩幅bitmap示意圖是針對(duì)同一播放文件的同一時(shí)間段而言的。從圖3中可以看出,可選節(jié)點(diǎn)存在一段連續(xù)子塊,其個(gè)數(shù)記為Coimterjtae,數(shù)量 為10,第一個(gè)子塊的序號(hào)用0ffset_0ne表示,在圖3中的序號(hào)是tl時(shí)刻。如果可選子塊 Bitmap的offset占用4個(gè)字節(jié),Counter_0ne占用2個(gè)字節(jié),則只需要6字節(jié)就可以向 Tracker上報(bào)自身的連續(xù)子塊信息。步驟102 請(qǐng)求節(jié)點(diǎn)接入Tracker,并向Tracker發(fā)送節(jié)點(diǎn)列表請(qǐng)求。本實(shí)施例中的請(qǐng)求節(jié)點(diǎn)可以是當(dāng)前接入Tracker的節(jié)點(diǎn),也可以需要重新確定活 動(dòng)節(jié)點(diǎn)的節(jié)點(diǎn)。節(jié)點(diǎn)列表請(qǐng)求中包含請(qǐng)求節(jié)點(diǎn)最急需的子塊,所述最急需的子塊可以是請(qǐng)求節(jié)點(diǎn) 中緩存的未播放數(shù)據(jù)中,第一個(gè)bit位置為0的子塊。由于bit位置為0表示該子塊未緩 存,因此,最急需的子塊可以看作是待下載數(shù)據(jù)的起始子塊。待下載數(shù)據(jù)的起始子塊的序號(hào) 可以用Offset_Zero表示。同時(shí),請(qǐng)求節(jié)點(diǎn)還可以向Tracker上報(bào)自身緩存子塊的信息,如自身緩存的連續(xù) 子塊的個(gè)數(shù)以及所述連續(xù)子塊中第一個(gè)子塊的序號(hào)。由于Tracker中保存了各可選節(jié)點(diǎn)緩存子塊的信息,因此,后續(xù)可以選擇緩存的 子塊信息滿足需求的可選子塊作為請(qǐng)求節(jié)點(diǎn)選擇活動(dòng)節(jié)點(diǎn)時(shí)的候選節(jié)點(diǎn)。步驟103 =Tracker從可選節(jié)點(diǎn)中選擇滿足選擇條件的多個(gè)候選節(jié)點(diǎn)。選擇條件包括候選節(jié)點(diǎn)中緩存了所述待下載數(shù)據(jù)的起始子塊。本步驟的具體選擇方式可以為首先,Tracker根據(jù)已知的連續(xù)子塊的個(gè)數(shù)以及所述連續(xù)子塊中第一個(gè)子塊的序 號(hào),確定可選節(jié)點(diǎn)中的哪些bit位置為“1”。接著,將可選節(jié)點(diǎn)中緩存的子塊與待下載數(shù)據(jù)的起始子塊進(jìn)行比較,判斷哪些可 選節(jié)點(diǎn)中緩存了待下載數(shù)據(jù)的起始子塊。最后,Tracker根據(jù)比較結(jié)果查找出緩存了所述待下載數(shù)據(jù)的起始子塊的可選節(jié) 點(diǎn)作為候選節(jié)點(diǎn)。仍以圖3為例,在請(qǐng)求節(jié)點(diǎn)緩存的數(shù)據(jù)中,第一個(gè)bit位置為0的子塊是子塊t3, 表示請(qǐng)求節(jié)點(diǎn)缺少的第一個(gè)子塊是序號(hào)為t3的子塊,因此,Tracker確定圖3中可選節(jié)點(diǎn) 緩存了 t3時(shí)刻的子塊,因此該可選節(jié)點(diǎn)可以作為候選節(jié)點(diǎn),此時(shí),選擇出的候選能夠向請(qǐng) 求節(jié)點(diǎn)提供需要的子塊。為了保證Tracker選擇的候選節(jié)點(diǎn)個(gè)數(shù)合理,既能夠使請(qǐng)求節(jié)點(diǎn)根據(jù)Peerlist正 確地確定出活動(dòng)節(jié)點(diǎn),又不至于因?yàn)楹蜻x節(jié)點(diǎn)個(gè)數(shù)過(guò)多造成帶寬消耗過(guò)大,因此,可以根據(jù) 當(dāng)前帶寬的實(shí)際條件或者經(jīng)驗(yàn)值確定候選節(jié)點(diǎn)個(gè)數(shù)的最大值。如果Tracker按照選擇條件 選擇的候選節(jié)點(diǎn)個(gè)數(shù)大于最大值,則對(duì)選擇的候選節(jié)點(diǎn)進(jìn)一步挑選,保證進(jìn)一步挑選出的 候選節(jié)點(diǎn)個(gè)數(shù)不大于最大值,例如可以使進(jìn)一步篩選出的候選節(jié)點(diǎn)個(gè)數(shù)等于最大值。步驟104 =Tracker將選擇的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)。步驟105 請(qǐng)求節(jié)點(diǎn)接收到所述節(jié)點(diǎn)列表后,根據(jù)節(jié)點(diǎn)列表中的節(jié)點(diǎn)信息確定至 少一個(gè)候選節(jié)點(diǎn)作為活動(dòng)節(jié)點(diǎn)。由于在步驟103中,已經(jīng)按照“候選節(jié)點(diǎn)中緩存所述待下載數(shù)據(jù)的起始子塊”為條 件對(duì)候選子塊進(jìn)行了選擇,因此,請(qǐng)求節(jié)點(diǎn)可以確認(rèn)所有的候選節(jié)點(diǎn)都能夠提供需要的子塊,減少了活動(dòng)節(jié)點(diǎn)確定過(guò)程中的信息交互,減少了資源浪費(fèi)。在本實(shí)施例中,請(qǐng)求節(jié)點(diǎn)可以根據(jù)Peerlist中的節(jié)點(diǎn)信息確定多個(gè)活動(dòng)節(jié)點(diǎn),這 樣做的目的是為了提高系統(tǒng)的可靠性,使得當(dāng)為請(qǐng)求節(jié)點(diǎn)提供數(shù)據(jù)的某一個(gè)活動(dòng)節(jié)點(diǎn)出現(xiàn) 問(wèn)題而無(wú)法繼續(xù)為請(qǐng)求節(jié)點(diǎn)提供服務(wù)時(shí),請(qǐng)求節(jié)點(diǎn)可以快速地與確定的其他活動(dòng)節(jié)點(diǎn)建立 數(shù)據(jù)傳輸?shù)倪B接。由于在短時(shí)間內(nèi),其他活動(dòng)節(jié)點(diǎn)的網(wǎng)絡(luò)狀態(tài)變化可能較小,因此,在一個(gè) 活動(dòng)節(jié)點(diǎn)出現(xiàn)問(wèn)題而由其他活動(dòng)節(jié)點(diǎn)作為備份活動(dòng)節(jié)點(diǎn)為請(qǐng)求節(jié)點(diǎn)提供數(shù)據(jù)成為可能。但 是,如果其他活動(dòng)節(jié)點(diǎn)的網(wǎng)絡(luò)狀態(tài)已發(fā)生了變化,則不再適合作為請(qǐng)求節(jié)點(diǎn)的活動(dòng)節(jié)點(diǎn),請(qǐng) 求節(jié)點(diǎn)需要再次執(zhí)行本發(fā)明實(shí)施例一的步驟,重新選擇活動(dòng)節(jié)點(diǎn)。通過(guò)本發(fā)明實(shí)施例一的方案,由于Tracker按照緩存請(qǐng)求節(jié)點(diǎn)最急需的子塊為條 件進(jìn)行了選擇,使選擇出的候選節(jié)點(diǎn)能夠向請(qǐng)求節(jié)點(diǎn)提供需要的子塊,也就是說(shuō)選擇出的 候選節(jié)點(diǎn)可以作為請(qǐng)求節(jié)點(diǎn)的活動(dòng)節(jié)點(diǎn),請(qǐng)求節(jié)點(diǎn)節(jié)點(diǎn)接收到Peerlist后,可以從中確定 至少一個(gè)節(jié)點(diǎn)作為活動(dòng)節(jié)點(diǎn)。減少了請(qǐng)求節(jié)點(diǎn)與Peerlist中節(jié)點(diǎn)信息對(duì)應(yīng)的節(jié)點(diǎn)進(jìn)行的 信息交互,簡(jiǎn)化了節(jié)點(diǎn)側(cè)的繁瑣操作。實(shí)施例二 為了使確定的活動(dòng)節(jié)點(diǎn)能夠在一定時(shí)間內(nèi)持續(xù)為請(qǐng)求節(jié)點(diǎn)提供用于下載的數(shù)據(jù), 實(shí)施例二在實(shí)施例一的基礎(chǔ)上,將步驟103中的選擇條件設(shè)置為候選節(jié)點(diǎn)中緩存了所述 待下載數(shù)據(jù)的起始子塊,并且保存的待下載數(shù)據(jù)的連續(xù)子塊的個(gè)數(shù)大于第一閾值。這里的 候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的連續(xù)子塊為待下載數(shù)據(jù)的起始子塊之后且與起始子塊相鄰 的連續(xù)子塊。具體的選擇過(guò)程如下首先,按照步驟103的方式選擇出候選節(jié)點(diǎn);接著,Tracker根據(jù)待下載數(shù)據(jù)的起始子塊在候選節(jié)點(diǎn)中的位置,確定待下載數(shù)據(jù) 的起始子塊之后且與起始子塊相鄰的連續(xù)子塊的個(gè)數(shù)。然后,Tracker將確定的待下載數(shù)據(jù)的連續(xù)子塊的個(gè)數(shù)與第一閾值進(jìn)行比較,判斷 待下載數(shù)據(jù)的連續(xù)子塊的個(gè)數(shù)是否大于第一閾值。這里的第一閾值可以是根據(jù)需要候選節(jié)點(diǎn)連續(xù)地向請(qǐng)求節(jié)點(diǎn)上載子塊的個(gè)數(shù)確 定的。例如要求候選節(jié)點(diǎn)至少能夠連續(xù)地向請(qǐng)求節(jié)點(diǎn)上載3個(gè)子塊,則第一閾值可以設(shè)置 為3。最后,Tracker選擇出下載數(shù)據(jù)的連續(xù)子塊的個(gè)數(shù)大于第一閾值的候選節(jié)點(diǎn)。仍以圖3為例,Tracker確定待下載數(shù)據(jù)的起始子塊為t3子塊,則查詢可選節(jié)點(diǎn)中 是否存在包含t3子塊的連續(xù)子塊,在圖3中,可選節(jié)點(diǎn)存在一段連續(xù)子塊中包含t3子塊, 并且在同一連續(xù)子塊中,t3之后還存在7個(gè)連續(xù)子塊。假設(shè)本實(shí)施例二中設(shè)定的第一閾值 為3,則圖3所示的可選節(jié)點(diǎn)能夠滿足實(shí)施例二的選擇條件。如果確定滿足本實(shí)施例二選擇條件的候選節(jié)點(diǎn)個(gè)數(shù)較多,如大于最大值,則可以 從中選擇部分節(jié)點(diǎn)作為寫(xiě)入Peerlist的節(jié)點(diǎn),具體的選擇部分節(jié)點(diǎn)的過(guò)程如下首先按照待下載數(shù)據(jù)的連續(xù)子塊的個(gè)數(shù)由大到小的順序,對(duì)選擇的候選節(jié)點(diǎn)進(jìn)行 排序,然后選擇排在前N個(gè)的候選節(jié)點(diǎn),所述N為正整數(shù)且不大于最大值。使得選擇出的候 選節(jié)點(diǎn)的下載數(shù)據(jù)的連續(xù)子塊多于未選擇的,保證能夠?yàn)檎?qǐng)求節(jié)點(diǎn)提供盡可能多的數(shù)據(jù)。在本實(shí)施例二的方案中,由于待下載數(shù)據(jù)的起始子塊是候選節(jié)點(diǎn)中一段連續(xù)子塊中的一個(gè),并且在連續(xù)子塊中,在待下載數(shù)據(jù)的起始子塊之后的子塊個(gè)數(shù)較多,使得在請(qǐng)求 節(jié)點(diǎn)確定的活動(dòng)節(jié)點(diǎn)還能夠在一段時(shí)間持續(xù)為請(qǐng)求節(jié)點(diǎn)提供下載的數(shù)據(jù),提高了系統(tǒng)的穩(wěn) 定性,避免了請(qǐng)求節(jié)點(diǎn)查找出的活動(dòng)節(jié)點(diǎn)能夠提供的數(shù)據(jù)有限,導(dǎo)致請(qǐng)求節(jié)點(diǎn)頻繁地查找 活動(dòng)節(jié)點(diǎn)的問(wèn)題,有效地緩解了通信壓力。實(shí)施例三本發(fā)明實(shí)施例三可以在實(shí)施例一或?qū)嵤├幕A(chǔ)上,進(jìn)一步地提出要求最終 選擇的候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的子塊總個(gè)數(shù)大于第二閾值。本發(fā)明實(shí)施例三的方法包括以下步驟第一步可選節(jié)點(diǎn)向Tracker上報(bào)自身緩存的子塊總個(gè)數(shù)信息。在本實(shí)施例中,P2P系統(tǒng)中的可選節(jié)點(diǎn)需要周期性地或?qū)崟r(shí)地向Tracker上報(bào)自 身緩存子塊總個(gè)數(shù),這里的總個(gè)數(shù)信息可以是實(shí)際緩存的子塊數(shù)量,也可以是待下載數(shù)據(jù) 的起始子塊之后的所有子塊數(shù)量。本步驟和實(shí)施例一中的步驟101可以同時(shí)執(zhí)行,即可選節(jié)點(diǎn)向Tracker上報(bào)自身 緩存的連續(xù)子塊信息和子塊總數(shù)信息,也可以只向Tracker上報(bào)其中的部分信息,或者是 在不同的時(shí)刻分別上報(bào)上述信息。第二步請(qǐng)求節(jié)點(diǎn)接入Tracker,并向Tracker發(fā)送節(jié)點(diǎn)請(qǐng)求列表,所述節(jié)點(diǎn)列表 請(qǐng)求中包括請(qǐng)求節(jié)點(diǎn)待下載數(shù)據(jù)的起始子塊標(biāo)識(shí)。本步驟與實(shí)施例一中步驟102相同。第三步=Tracker從可選節(jié)點(diǎn)中選擇滿足選擇條件的多個(gè)候選節(jié)點(diǎn)。選擇條件至少包括候選節(jié)點(diǎn)中緩存了待下載數(shù)據(jù)的起始子塊;待下載數(shù)據(jù)的起 始子塊之后且相鄰的連續(xù)子塊個(gè)數(shù)大于第一閾值;候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的子塊總個(gè) 數(shù)大于第二閾值。這里的第二閾值可以根據(jù)需要候選節(jié)點(diǎn)向請(qǐng)求節(jié)點(diǎn)上載子塊的個(gè)數(shù)確定的,第二 閾值設(shè)置越大,表示能夠向請(qǐng)求節(jié)點(diǎn)上載子塊的個(gè)數(shù)越多。具體的選擇方式是首先,按照實(shí)施例一和/或?qū)嵤├姆桨赋醪酱_定候選節(jié)點(diǎn)。然后,Tracker根據(jù)待下載數(shù)據(jù)的起始子塊在初步確定的候選節(jié)點(diǎn)中的位置,確定 待下載數(shù)據(jù)的起始子塊之后的所有子塊的個(gè)數(shù)。最后,Tracker將確定的所有子塊的個(gè)數(shù)與第二閾值進(jìn)行比較,選擇出子塊的個(gè)數(shù) 大于第二閾值的候選節(jié)點(diǎn)。仍以圖3為例,在可選節(jié)點(diǎn)中,t3子塊之后還緩存有11個(gè)子塊,如果第二閾值為 10,則該可選節(jié)點(diǎn)能夠滿足本實(shí)施例四的選擇條件,可以成為候選節(jié)點(diǎn)。本實(shí)施例中以F表 示可選節(jié)點(diǎn)中緩存的子塊總個(gè)數(shù),如果F占用2個(gè)字節(jié),則可選節(jié)點(diǎn)只需要向Tracker上報(bào) F信息即可以告知自身緩存子塊的信息。第三步中可以通過(guò)以下兩個(gè)公式完成利用實(shí)施例三的選擇條件的選擇候選節(jié)點(diǎn) 過(guò)程0ffset_0ne ^ Offset_Zero ^ 0ffset_0ne+Counter_0ne (1)V = Counter_0ne-(0ffset_Zero-0ffset_0ne)(2)其中公式(1)表示請(qǐng)求節(jié)點(diǎn)最急需的子塊位于可選節(jié)點(diǎn)的一段連續(xù)的子塊中,公式(2)表示可選節(jié)點(diǎn)能夠?yàn)檎?qǐng)求節(jié)點(diǎn)連續(xù)提供的子塊數(shù)量為V,其中,V等于或大于設(shè)定 的第一閾值。如果以上公式(1)成立,Tracker可以從上述兩個(gè)公式確定的候選節(jié)點(diǎn)中進(jìn)一步 選擇F大于第二閾值的可選節(jié)點(diǎn);如果公式(1)不成立,Tracker可以直接選擇F大于第二 閾值的可選節(jié)點(diǎn)。第四步=Tracker將通過(guò)第三步中的選擇條件選擇出的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò) Peerlist發(fā)送給請(qǐng)求節(jié)點(diǎn)。第五步請(qǐng)求節(jié)點(diǎn)可以根據(jù)接收到的Peerlist確定至少一個(gè)活動(dòng)節(jié)點(diǎn)。如果確定滿足本實(shí)施例三選擇條件的候選節(jié)點(diǎn)個(gè)數(shù)較多,大于最大值,則可以從 中選擇部分節(jié)點(diǎn)作為寫(xiě)入Peerlist的節(jié)點(diǎn),具體的選擇部分節(jié)點(diǎn)的過(guò)程如下首先按照待下載數(shù)據(jù)的子塊總個(gè)數(shù)由大到小的順序,對(duì)選擇的候選節(jié)點(diǎn)進(jìn)行排 序,然后選擇排在前M個(gè)候選節(jié)點(diǎn),所述M為正整數(shù)且不大于最大值。選擇出的候選節(jié)點(diǎn)的 下載數(shù)據(jù)的子塊總個(gè)數(shù)多于未選擇的,保證能夠?yàn)檎?qǐng)求節(jié)點(diǎn)提供盡可能多的數(shù)據(jù)。在本實(shí)施例三的方案中,由于最終選擇出的候選節(jié)點(diǎn)緩存的待下載數(shù)據(jù)的子塊總 個(gè)數(shù)較多,可以在實(shí)施例三的基礎(chǔ)上,進(jìn)一步確定選擇出的候選節(jié)點(diǎn)能夠?yàn)檎?qǐng)求節(jié)點(diǎn)提供 盡可能多的數(shù)據(jù),盡量減少請(qǐng)求節(jié)點(diǎn)查詢活動(dòng)節(jié)點(diǎn)的次數(shù)。實(shí)施例四可選節(jié)點(diǎn)向Tracker上報(bào)的信息中,還可以包括連接節(jié)點(diǎn)個(gè)數(shù)是否飽和的相關(guān)信 息,則Tracker可以在實(shí)施例一至實(shí)施例三任一實(shí)施例的基礎(chǔ)上,選擇連接節(jié)點(diǎn)個(gè)數(shù)未飽 和的候選節(jié)點(diǎn)。實(shí)施例四的方案如下第一步可選節(jié)點(diǎn)向Tracker上報(bào)自身連接節(jié)點(diǎn)個(gè)數(shù)是否飽和的信息。本步驟可以與實(shí)施例一的步驟101和實(shí)施例三的第一步可以執(zhí)行,也可以分別執(zhí) 行。所述連接節(jié)點(diǎn)個(gè)數(shù)是指從可選節(jié)點(diǎn)處獲取數(shù)據(jù)的其他節(jié)點(diǎn)個(gè)數(shù)。也就是說(shuō),計(jì)算 可選節(jié)點(diǎn)的連接節(jié)點(diǎn)個(gè)數(shù)時(shí),只考慮候可節(jié)點(diǎn)作為活動(dòng)節(jié)點(diǎn)時(shí)連接的其他節(jié)點(diǎn)個(gè)數(shù)是否飽 和,不考慮可選節(jié)點(diǎn)從其他節(jié)點(diǎn)處下載數(shù)據(jù)時(shí)連接的其他節(jié)點(diǎn)個(gè)數(shù)。在本發(fā)明實(shí)施例四的方案中,可選節(jié)點(diǎn)在登錄Tracker后可以周期性的通知自身 的連接節(jié)點(diǎn)個(gè)數(shù)是否飽和,具體的通知方式包括但不限于以下兩種方式第一種方式可選節(jié)點(diǎn)可以周期性地向Tracker上報(bào)自身的連接標(biāo)志,記為 CormectioruFlag,所述連接標(biāo)志表示該可選節(jié)點(diǎn)是否還可以向其它節(jié)點(diǎn)提供數(shù)據(jù),也就是 連接節(jié)點(diǎn)個(gè)數(shù)是否飽和。如果某一可選節(jié)點(diǎn)的連接節(jié)點(diǎn)個(gè)數(shù)已經(jīng)達(dá)到能夠連接的最大節(jié)點(diǎn)個(gè)數(shù),就將 Connection_Flag置為“down”,表示該可選節(jié)點(diǎn)的連接節(jié)點(diǎn)個(gè)數(shù)已經(jīng)飽和,不能再向其它 節(jié)點(diǎn)提供數(shù)據(jù)下載;否則,將CormectioruFlag置為“up”,表示該可選節(jié)點(diǎn)的連接節(jié)點(diǎn)個(gè)數(shù) 未飽和,還可以向其它節(jié)點(diǎn)提供數(shù)據(jù)。通過(guò)本方式使Tracker確定可選節(jié)點(diǎn)連接節(jié)點(diǎn)個(gè)數(shù) 是否飽和時(shí),節(jié)點(diǎn)與Tracker之間只需要傳輸一個(gè)字節(jié)的CormectioruFlag,因此,占用的 網(wǎng)絡(luò)資源較少。第二種方式可選節(jié)點(diǎn)在接入Tracker時(shí),通知Tracker自身能夠連接的最大節(jié)點(diǎn)個(gè)數(shù)。在后續(xù)過(guò)程中,可選節(jié)點(diǎn)周期性地向Tracker上報(bào)自身已經(jīng)連接的節(jié)點(diǎn)個(gè)數(shù)。 Tracker判斷可選節(jié)點(diǎn)當(dāng)前已經(jīng)連接的節(jié)點(diǎn)個(gè)數(shù)是否小于可選節(jié)點(diǎn)能夠連接的最大節(jié)點(diǎn)個(gè) 數(shù),若是,則表示可選節(jié)點(diǎn)的連接節(jié)點(diǎn)個(gè)數(shù)未飽和;否則,表示可選節(jié)點(diǎn)的連接節(jié)點(diǎn)個(gè)數(shù)已 飽和。第二步請(qǐng)求節(jié)點(diǎn)接入Tracker,并向Tracker發(fā)送節(jié)點(diǎn)列表請(qǐng)求,所述節(jié)點(diǎn)列表 請(qǐng)求中包括請(qǐng)求節(jié)點(diǎn)待下載數(shù)據(jù)的起始子塊標(biāo)識(shí)。本步驟與步驟102相同。第三步=Tracker從確定的節(jié)點(diǎn)中選擇滿足選擇條件的多個(gè)候選節(jié)點(diǎn)。選擇條件可以在實(shí)施例一至實(shí)施例三中任意實(shí)施例的基礎(chǔ)上再增加候選節(jié)點(diǎn)的 連接節(jié)點(diǎn)個(gè)數(shù)未飽和。第四步=Tracker將選擇的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)。由于第三步中,Tracker對(duì)接入的節(jié)點(diǎn)按照連接節(jié)點(diǎn)個(gè)數(shù)是否飽和的條件進(jìn)行了 篩選,因此,在本步驟中,節(jié)點(diǎn)列表中的節(jié)點(diǎn)信息對(duì)應(yīng)的候選節(jié)點(diǎn)都具有與請(qǐng)求節(jié)點(diǎn)連接的 能力。如果Tracker按照第三步的選擇條件選擇的候選節(jié)點(diǎn)個(gè)數(shù)大于最大值,則對(duì)選擇 的候選節(jié)點(diǎn)進(jìn)一步篩選,保證進(jìn)一步篩選出的候選節(jié)點(diǎn)個(gè)數(shù)不大于最大值,例如可以使進(jìn) 一步篩選出的候選節(jié)點(diǎn)個(gè)數(shù)等于最大值。第五步請(qǐng)求節(jié)點(diǎn)接收到所述節(jié)點(diǎn)列表后,根據(jù)節(jié)點(diǎn)列表中的節(jié)點(diǎn)信息確定至少 一個(gè)候選節(jié)點(diǎn)作為活動(dòng)節(jié)點(diǎn)。在本步驟中,請(qǐng)求節(jié)點(diǎn)不必向節(jié)點(diǎn)列表中的各候選節(jié)點(diǎn)發(fā)送用于確定是否具有連 接能力的探測(cè)信息就能夠確定至少一個(gè)能夠提供請(qǐng)求節(jié)點(diǎn)需要的數(shù)據(jù)的活動(dòng)節(jié)點(diǎn)。通過(guò)本發(fā)明實(shí)施例四的方案,由于Tracker對(duì)系統(tǒng)中的可選節(jié)點(diǎn)按照連接節(jié)點(diǎn)個(gè) 數(shù)是否飽和的條件進(jìn)行了篩選,使選擇出的候選節(jié)點(diǎn)具有連接其他節(jié)點(diǎn)能力,因此提高了 Tracker的利用率,為請(qǐng)求節(jié)點(diǎn)提供了準(zhǔn)確性更高的Peerlist列表;同時(shí),由于請(qǐng)求節(jié)點(diǎn)無(wú) 需再向候選節(jié)點(diǎn)查詢是否具有連接其他節(jié)點(diǎn)能力,因此,減少了請(qǐng)求節(jié)點(diǎn)與候選節(jié)點(diǎn)之間 的信息交互數(shù)量,降低了網(wǎng)絡(luò)帶寬消耗。通過(guò)本發(fā)明實(shí)施例的方案,由于Tracker不僅對(duì)系統(tǒng)中的可選節(jié)點(diǎn)按照候選節(jié)點(diǎn) 的連接節(jié)點(diǎn)個(gè)數(shù)不飽和的條件進(jìn)行了篩選,使選擇出的候選節(jié)點(diǎn)能夠與請(qǐng)求節(jié)點(diǎn)連接;同 時(shí)由于在實(shí)施例一至實(shí)施例三任意實(shí)施例的方案中,要求候選節(jié)點(diǎn)緩存了請(qǐng)求節(jié)點(diǎn)最急需 的子塊,因此候選節(jié)點(diǎn)都可以作為請(qǐng)求節(jié)點(diǎn)的活動(dòng)節(jié)點(diǎn),省略了請(qǐng)求節(jié)點(diǎn)與Peerlist中節(jié) 點(diǎn)信息對(duì)應(yīng)的節(jié)點(diǎn)進(jìn)行信息交互、通過(guò)交換bitmap確定活動(dòng)節(jié)點(diǎn)的步驟,極大地減少了信 息傳輸數(shù)量,使現(xiàn)有的兩步確定活動(dòng)節(jié)點(diǎn)的方式變?yōu)橐徊酱_定,簡(jiǎn)化了節(jié)點(diǎn)側(cè)的繁瑣操作。在本發(fā)明實(shí)施例一至四的方案中,每一個(gè)可選節(jié)點(diǎn)可以周期性地向Tracker上報(bào) 自身對(duì)bitmap精簡(jiǎn)、進(jìn)行加工后的信息,這些信息包括但不限于以下信息中的一種或多種 組合Connection—Flag、Bitmap 的 offset—one、Counter—One 以及 Bitmap 中 bit 位標(biāo)識(shí)為 “1”的個(gè)數(shù)F。Tracker根據(jù)接收到的信息確定各可選節(jié)點(diǎn)中緩存的子塊狀態(tài),進(jìn)而根據(jù)實(shí) 施例一至實(shí)施例四中涉及的選擇條件選擇合適的候選節(jié)點(diǎn)。本發(fā)明并不限定這些信息占用的字節(jié)數(shù),例如可以設(shè)定CormectioruFlag占用1 個(gè)字節(jié),Bitmap的offset占用4個(gè)字節(jié),Counter_0ne占用2個(gè)字節(jié),F(xiàn)占用2個(gè)字節(jié)。
在本發(fā)明各實(shí)施例分別涉及了以下四種選擇候選節(jié)點(diǎn)的選擇條件1、候選節(jié)點(diǎn)的連接節(jié)點(diǎn)個(gè)數(shù)未飽和,所述連接節(jié)點(diǎn)個(gè)數(shù)是從候選節(jié)點(diǎn)處獲取數(shù)據(jù) 的其他節(jié)點(diǎn)個(gè)數(shù)。2、候選節(jié)點(diǎn)中緩存了所述節(jié)點(diǎn)列表請(qǐng)求中包含的待下載數(shù)據(jù)的起始子塊。3、候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的連續(xù)子塊的個(gè)數(shù)大于第一閾值。特殊地,在候選節(jié)點(diǎn)中緩存了所述節(jié)點(diǎn)列表請(qǐng)求中包含的待下載數(shù)據(jù)的起始子塊 時(shí),候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的連續(xù)子塊為待下載數(shù)據(jù)的起始子塊之后且與起始子塊 相鄰的連續(xù)子塊。4、候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的子塊總個(gè)數(shù)大于第二閾值。特殊地,在候選節(jié)點(diǎn)中緩存了所述節(jié)點(diǎn)列表請(qǐng)求中包含的待下載數(shù)據(jù)的起始子塊 時(shí),候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的子塊為待下載數(shù)據(jù)的起始子塊之后的子塊。實(shí)施例一按照第2個(gè)選擇條件選擇候選節(jié)點(diǎn);實(shí)施例二按照第2個(gè)和第3個(gè)選擇 條件選擇候選節(jié)點(diǎn);實(shí)施例三按照第2個(gè)、第3個(gè)和第4個(gè)選擇條件選擇候選節(jié)點(diǎn);實(shí)施例 四按照第1個(gè)、第2個(gè)第3個(gè)和第4個(gè)選擇條件選擇候選節(jié)點(diǎn)。除了本發(fā)明實(shí)施例一至四 記載的方案之外,本發(fā)明也不限于僅按照第3個(gè)選擇條件選擇候選節(jié)點(diǎn)、僅按照第4個(gè)選擇 條件選擇候選節(jié)點(diǎn)或僅按照第1個(gè)選擇條件選擇候選節(jié)點(diǎn),以及其他將上述4個(gè)選擇條件 組合的方式選擇候選節(jié)點(diǎn)。 例如按照第1個(gè)和第3個(gè)選擇條件選擇候選節(jié)點(diǎn)=Tracker從滿足第1個(gè)選擇條 件的候選節(jié)點(diǎn)中進(jìn)一步選擇出至少一個(gè)滿足第3個(gè)選擇條件的候選節(jié)點(diǎn),其中滿足第3個(gè) 選擇條件是候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的連續(xù)子塊的個(gè)數(shù)大于第一閾值。在這里,候選節(jié) 點(diǎn)中保存待下載數(shù)據(jù)的連續(xù)子塊可以包含待下載數(shù)據(jù)的起始子塊,也可以不包含待下載數(shù) 據(jù)的起始子塊。按照第1個(gè)和第4個(gè)選擇條件選擇候選節(jié)點(diǎn)=Tracker從滿足第1個(gè)選擇條件的 候選節(jié)點(diǎn)中進(jìn)一步選擇出至少一個(gè)滿足第4個(gè)選擇條件的候選節(jié)點(diǎn),其中滿足第4個(gè)選擇 條件是候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的子塊總個(gè)數(shù)大于第二閾值。在這里,候選節(jié)點(diǎn)中保存 待下載數(shù)據(jù)的子塊可以包含待下載數(shù)據(jù)的起始子塊(也就是實(shí)施例二、三或四的方案),也 可以不包含待下載數(shù)據(jù)的起始子塊,如果不包含待下載數(shù)據(jù)的起始子塊,則這里的候選節(jié) 點(diǎn)中保存待下載數(shù)據(jù)的子塊是指候選節(jié)點(diǎn)的總子塊,并不特指待下載數(shù)據(jù)的起始子塊之后 的子塊。按照第1個(gè)、第2個(gè)和第4個(gè)選擇條件選擇候選節(jié)點(diǎn)在滿足第1個(gè)和第2個(gè)選擇 條件的候選節(jié)點(diǎn)個(gè)數(shù)為多個(gè)時(shí),Tracker從中進(jìn)一步選擇出至少一個(gè)滿足第4個(gè)選擇條件 的候選節(jié)點(diǎn),其中滿足第4個(gè)選擇條件是候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的子塊總個(gè)數(shù)大于 第二閾值。特殊地,候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的子塊為待下載數(shù)據(jù)的起始子塊之后的子 塊。按照第1個(gè)、第3個(gè)和第4個(gè)選擇條件選擇候選節(jié)點(diǎn)在滿足第1個(gè)和第3個(gè)選擇 條件的候選節(jié)點(diǎn)個(gè)數(shù)為多個(gè)時(shí),Tracker從中進(jìn)一步選擇至少一個(gè)滿足第4個(gè)選擇條件的 候選節(jié)點(diǎn),其中滿足第4個(gè)選擇條件是候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的子塊總個(gè)數(shù)大于第 二閾值。候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的子塊可以包含待下載數(shù)據(jù)的起始子塊(也就是實(shí)施 例四的方案),也可以不包含待下載數(shù)據(jù)的起始子塊,如果不包含待下載數(shù)據(jù)的起始子塊,
13則這里的候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的子塊是指候選節(jié)點(diǎn)的總子塊,并不特指待下載數(shù)據(jù) 的起始子塊之后的子塊。在請(qǐng)求節(jié)點(diǎn)確定活動(dòng)節(jié)點(diǎn)之后,可以從活動(dòng)節(jié)點(diǎn)出下載需要的數(shù)據(jù)。當(dāng)確定的活 動(dòng)節(jié)點(diǎn)失效后,請(qǐng)求節(jié)點(diǎn)將重新向Tracker發(fā)送節(jié)點(diǎn)列表請(qǐng)求,以獲取新的活動(dòng)節(jié)點(diǎn)列表。在本發(fā)明實(shí)施例中,Tracker在收到請(qǐng)求節(jié)點(diǎn)發(fā)送的節(jié)點(diǎn)列表請(qǐng)求后,可以預(yù)先按 照節(jié)點(diǎn)的IP地址,選擇出物理地址與請(qǐng)求節(jié)點(diǎn)接近的節(jié)點(diǎn)(如同省或同一國(guó)家,或者是地 理位置差別小于固定值的節(jié)點(diǎn))后,再利用本發(fā)明實(shí)施例的選擇條件進(jìn)一步從中選擇候選 節(jié)點(diǎn)。與本發(fā)明方法實(shí)施例屬于同一發(fā)明構(gòu)思下的,本發(fā)明實(shí)施例五還提供一種在P2P 流媒體系統(tǒng)中查找活動(dòng)節(jié)點(diǎn)的系統(tǒng),如圖4所示,所述系統(tǒng)包括請(qǐng)求節(jié)點(diǎn)11、可選節(jié)點(diǎn)12和 Tracker 13,其中請(qǐng)求節(jié)點(diǎn)11用于向Trackerl3發(fā)送節(jié)點(diǎn)列表請(qǐng)求,并根據(jù)Trackerl3返回的節(jié)點(diǎn) 列表中的節(jié)點(diǎn)信息,確定至少一個(gè)候選節(jié)點(diǎn)作為活動(dòng)節(jié)點(diǎn);可選節(jié)點(diǎn)12用于向Trackers 上報(bào)緩存的連續(xù)子塊的個(gè)數(shù)以及所述連續(xù)子塊中第一個(gè)子塊的序號(hào);Tracker^用于在接 收到節(jié)點(diǎn)列表請(qǐng)求后,根據(jù)節(jié)點(diǎn)列表請(qǐng)求中包含的請(qǐng)求節(jié)點(diǎn)待下載數(shù)據(jù)的起始子塊序號(hào), 選擇多個(gè)可選節(jié)點(diǎn)12作為候選節(jié)點(diǎn),其中,候選節(jié)點(diǎn)中緩存了所述待下載數(shù)據(jù)的起始子 塊,并將選擇的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)11。Trackers還用于從候選節(jié)點(diǎn)中進(jìn)一步篩選出緩存的連續(xù)子塊的個(gè)數(shù)大于第一 閾值的候選節(jié)點(diǎn),并將進(jìn)一步篩選出的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn) 11,所述連續(xù)子塊是指所述待下載數(shù)據(jù)的起始子塊之后且與起始子塊相鄰的連續(xù)子塊。所述可選節(jié)點(diǎn)12還用于向Trackerl3上報(bào)緩存的子塊總個(gè)數(shù)信息;則Trackerl3 還用于從候選節(jié)點(diǎn)中進(jìn)一步篩選出緩存的子塊總個(gè)數(shù)大于第二閾值的候選節(jié)點(diǎn),并將進(jìn)一 步篩選出的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)11,所述進(jìn)一步篩選出的候 選節(jié)點(diǎn)中緩存的子塊是指待下載數(shù)據(jù)的起始子塊之后的所有子塊。所述可選節(jié)點(diǎn)11還用于向Trackers上報(bào)連接節(jié)點(diǎn)個(gè)數(shù)是否飽和的信息,或已連 接的節(jié)點(diǎn)個(gè)數(shù)及能夠連接的最大節(jié)點(diǎn)個(gè)數(shù),所述連接節(jié)點(diǎn)個(gè)數(shù)是指從可選節(jié)點(diǎn)處獲取數(shù) 據(jù)的其他節(jié)點(diǎn)個(gè)數(shù);則Trackers還用于從候選節(jié)點(diǎn)中進(jìn)一步篩選出連接節(jié)點(diǎn)個(gè)數(shù)未飽和 的候選節(jié)點(diǎn),并將進(jìn)一步篩選出的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)11。Tracker^還用于在候選節(jié)點(diǎn)個(gè)數(shù)大于最大值時(shí),對(duì)選擇的候選節(jié)點(diǎn)再次進(jìn)行挑 選,并將再次挑選后的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)11,所述再次挑 選后的候選節(jié)點(diǎn)個(gè)數(shù)不大于最大值。在選擇條件包括緩存的連續(xù)子塊的個(gè)數(shù)大于第一閾值時(shí),Trackerl3還用于在 進(jìn)一步篩選出的候選節(jié)點(diǎn)個(gè)數(shù)大于最大值時(shí),按照待下載數(shù)據(jù)的連續(xù)子塊的個(gè)數(shù)由大到小 的順序,對(duì)候選節(jié)點(diǎn)進(jìn)行排序,再次挑選前N個(gè)候選節(jié)點(diǎn),并將再次挑選的N個(gè)候選節(jié)點(diǎn)的 節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)11,所述N為正整數(shù)且不大于最大值。在選擇條件還包括候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的子塊總個(gè)數(shù)大于第二閾值時(shí), Trackers還用于在選擇的候選節(jié)點(diǎn)個(gè)數(shù)大于最大值時(shí),按照待下載數(shù)據(jù)的子塊總個(gè)數(shù)由 大到小的順序,對(duì)選擇的候選節(jié)點(diǎn)進(jìn)行排序,再次挑選前M個(gè)候選節(jié)點(diǎn),并將再次挑選的M 個(gè)候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)11,所述M為正整數(shù)且不大于最大
14
本發(fā)明實(shí)施例六還提供一種追蹤設(shè)備,應(yīng)用于P2P流媒體系統(tǒng)中,如圖5所示,所 述追蹤設(shè)備包括請(qǐng)求接收模塊21、信息接收模塊22、第一選擇模塊23和列表發(fā)送模塊24, 其中請(qǐng)求接收模塊21用于接收節(jié)點(diǎn)列表請(qǐng)求,所述節(jié)點(diǎn)列表請(qǐng)求中包含的請(qǐng)求節(jié)點(diǎn)待下 載數(shù)據(jù)的起始子塊序號(hào);信息接收模塊22用于接收可選節(jié)點(diǎn)上報(bào)的緩存的連續(xù)子塊的個(gè) 數(shù)以及所述連續(xù)子塊中第一個(gè)子塊的序號(hào);第一選擇模塊23用于根據(jù)待下載數(shù)據(jù)的起始 子塊序號(hào),選擇多個(gè)可選節(jié)點(diǎn)作為候選節(jié)點(diǎn),其中,候選節(jié)點(diǎn)中緩存了所述待下載數(shù)據(jù)的起 始子塊;列表發(fā)送模塊24用于將選擇的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié) 點(diǎn)ο所述第一選擇模塊23還可以用于從候選節(jié)點(diǎn)中進(jìn)一步篩選出緩存的連續(xù)子塊的 個(gè)數(shù)大于第一閾值的候選節(jié)點(diǎn),所述連續(xù)子塊是指所述待下載數(shù)據(jù)的起始子塊之后且與 起始子塊相鄰的連續(xù)子塊。所述信息接收模塊22還用于接收可選節(jié)點(diǎn)上報(bào)的緩存的子塊總個(gè)數(shù)信息;則所 述第一選擇模塊23還用于從候選節(jié)點(diǎn)中進(jìn)一步篩選出緩存的子塊總個(gè)數(shù)大于第二閾值的 候選節(jié)點(diǎn),所述進(jìn)一步篩選出的候選節(jié)點(diǎn)中緩存的子塊是指待下載數(shù)據(jù)的起始子塊之后 的所有子塊。所述信息接收模塊22還用于接收可選節(jié)點(diǎn)上報(bào)的連接節(jié)點(diǎn)個(gè)數(shù)是否飽和的信 息,或已連接的節(jié)點(diǎn)個(gè)數(shù)及能夠連接的最大節(jié)點(diǎn)個(gè)數(shù),所述連接節(jié)點(diǎn)個(gè)數(shù)是指從可選節(jié)點(diǎn) 處獲取數(shù)據(jù)的其他節(jié)點(diǎn)個(gè)數(shù);則所述第一選擇模塊23還用于從候選節(jié)點(diǎn)中進(jìn)一步篩選出 連接節(jié)點(diǎn)個(gè)數(shù)未飽和的候選節(jié)點(diǎn)。所述追蹤設(shè)備還包括第二選擇模塊25,在選擇條件不同時(shí),第二選擇模塊25的功 能也不同。在選擇條件為候選節(jié)點(diǎn)的連接節(jié)點(diǎn)個(gè)數(shù)未飽和或緩存待下載數(shù)據(jù)的起始子塊時(shí), 第二選擇模塊25用于在第一選擇模塊23選擇的候選節(jié)點(diǎn)個(gè)數(shù)大于最大值時(shí),對(duì)選擇的候 選節(jié)點(diǎn)再次進(jìn)行挑選,并將再次挑選的候選節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)信息發(fā)送給列表發(fā)送模塊24, 其中再次挑選的候選節(jié)點(diǎn)個(gè)數(shù)不大于最大值。在選擇條件至少包括候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的連續(xù)子塊的個(gè)數(shù)大于第一閾 值時(shí),第二選擇模塊25用于在第一選擇模塊23選擇的候選節(jié)點(diǎn)個(gè)數(shù)大于最大值時(shí),按照緩 存的連續(xù)子塊的個(gè)數(shù)由大到小的順序,對(duì)選擇的候選節(jié)點(diǎn)進(jìn)行排序,再次挑選前N個(gè)候選 節(jié)點(diǎn),并將再次挑選的N個(gè)候選節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)信息發(fā)送給列表發(fā)送模塊24,所述N為正整 數(shù)且不大于最大值。這里的待下載數(shù)據(jù)的連續(xù)子塊是指待下載數(shù)據(jù)的起始子塊之后且與 起始子塊相鄰的連續(xù)子塊。在選擇條件至少包括候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的子塊總個(gè)數(shù)大于第二閾值時(shí), 第二選擇模塊25用于在第一選擇模塊23選擇的候選節(jié)點(diǎn)個(gè)數(shù)大于最大值時(shí),按照待下載 數(shù)據(jù)的子塊總個(gè)數(shù)由大到小的順序,對(duì)選擇的候選節(jié)點(diǎn)進(jìn)行排序,再次挑選前M個(gè)候選節(jié) 點(diǎn),并將再次挑選的M個(gè)候選節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)信息發(fā)送給列表發(fā)送模塊24,所述M為正整數(shù) 且不大于最大值。候選節(jié)點(diǎn)中保存待下載數(shù)據(jù)的子塊為待下載數(shù)據(jù)的起始子塊之后的子 塊。本發(fā)明實(shí)施例七還提供一種節(jié)點(diǎn)設(shè)備,該節(jié)點(diǎn)設(shè)備在能夠向其他節(jié)點(diǎn)設(shè)備上載數(shù)據(jù)時(shí),可以作為是上述各實(shí)施例中涉及的可選節(jié)點(diǎn);同時(shí),該節(jié)點(diǎn)設(shè)備也可以是上述各實(shí)施 例中涉及的請(qǐng)求節(jié)點(diǎn)。如圖6所示,本實(shí)施例七中的節(jié)點(diǎn)設(shè)備包括信息上報(bào)模塊31和數(shù)據(jù)輸出模塊32, 其中信息上報(bào)模塊31用于向Tracker上報(bào)緩存的連續(xù)子塊的個(gè)數(shù)以及所述連續(xù)子塊中第 一個(gè)子塊的序號(hào);數(shù)據(jù)輸出模塊32用于根據(jù)其他節(jié)點(diǎn)設(shè)備的請(qǐng)求向其他節(jié)點(diǎn)設(shè)備上載數(shù) 據(jù)。進(jìn)一步地,所述信息上報(bào)模塊31還用于向Tracker上報(bào)以下信息中的一種或多種 的組合節(jié)點(diǎn)設(shè)備連接節(jié)點(diǎn)個(gè)數(shù)是否飽和;節(jié)點(diǎn)設(shè)備緩存的子塊總個(gè)數(shù)信息。當(dāng)本實(shí)施例中的節(jié)點(diǎn)設(shè)備作為請(qǐng)求節(jié)點(diǎn)時(shí),還可以包括一個(gè)請(qǐng)求模塊,用于向 Tracker上報(bào)節(jié)點(diǎn)列表請(qǐng)求,并在接收到Tracker返回的節(jié)點(diǎn)列表時(shí),向列表中的其他節(jié)點(diǎn) 設(shè)備請(qǐng)求下載數(shù)據(jù)。通過(guò)本發(fā)明實(shí)施例提供的方法、系統(tǒng)及設(shè)備,各可選節(jié)點(diǎn)向Tracker精簡(jiǎn)、高效地 上報(bào)自身的子塊信息,如緩存的連續(xù)子塊的個(gè)數(shù)、所述連續(xù)子塊中第一個(gè)子塊的序號(hào)以及 緩存的子塊總個(gè)數(shù)信息等,使Tracker能夠?qū)崟r(shí)確認(rèn)各可選節(jié)點(diǎn)當(dāng)前緩存子塊和連接其他 節(jié)點(diǎn)個(gè)數(shù)的狀態(tài),當(dāng)有請(qǐng)求節(jié)點(diǎn)請(qǐng)求獲得節(jié)點(diǎn)列表時(shí),Tracker可以根據(jù)實(shí)際需要,按照緩 存子塊和連接節(jié)點(diǎn)個(gè)數(shù)為條件,從可選節(jié)點(diǎn)中選擇滿足條件的節(jié)點(diǎn)作為候選節(jié)點(diǎn),保證選 擇的候選節(jié)點(diǎn)能夠正確地為請(qǐng)求節(jié)點(diǎn)上載數(shù)據(jù),則請(qǐng)求節(jié)點(diǎn)在確定活動(dòng)節(jié)點(diǎn)時(shí),將原來(lái)的 兩步查找活動(dòng)節(jié)點(diǎn)的過(guò)程變?yōu)橐徊讲檎遥苏?qǐng)求節(jié)點(diǎn)通過(guò)Peerlist查找活動(dòng)節(jié)點(diǎn)時(shí) 產(chǎn)生的報(bào)文,減輕網(wǎng)絡(luò)的壓力,減少帶寬消耗;假設(shè)在現(xiàn)有技術(shù)方案中每個(gè)節(jié)點(diǎn)平均查詢 10個(gè)節(jié)點(diǎn)就可以找到活動(dòng)節(jié)點(diǎn),那么,在一個(gè)擁有100萬(wàn)個(gè)節(jié)點(diǎn)的P2P系統(tǒng)中,由此增加的 報(bào)文條數(shù)為1000萬(wàn)條。而本發(fā)明方案取消了這部分報(bào)文的發(fā)送,明顯減輕網(wǎng)絡(luò)的帶寬壓 力。另外,各節(jié)點(diǎn)上報(bào)的節(jié)點(diǎn)信息由Tracker統(tǒng)一處理,提高了 Tracker的利用率。利用本 發(fā)明方案后,請(qǐng)求節(jié)點(diǎn)只需向tracker發(fā)送一個(gè)節(jié)點(diǎn)列表請(qǐng)求就可以找到活動(dòng)節(jié)點(diǎn),縮短 了播放啟動(dòng)時(shí)間。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精 神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍 之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
一種在P2P流媒體系統(tǒng)中查找活動(dòng)節(jié)點(diǎn)的方法,其特征在于,可選節(jié)點(diǎn)向追蹤設(shè)備Tracker上報(bào)緩存的連續(xù)子塊的個(gè)數(shù)以及所述連續(xù)子塊中第一個(gè)子塊的序號(hào);所述查找活動(dòng)節(jié)點(diǎn)的方法包括Tracker接收請(qǐng)求節(jié)點(diǎn)發(fā)送的節(jié)點(diǎn)列表請(qǐng)求后,根據(jù)節(jié)點(diǎn)列表請(qǐng)求中包含的請(qǐng)求節(jié)點(diǎn)待下載數(shù)據(jù)的起始子塊序號(hào),選擇多個(gè)可選節(jié)點(diǎn)作為候選節(jié)點(diǎn),其中,候選節(jié)點(diǎn)中緩存了所述待下載數(shù)據(jù)的起始子塊;Tracker將候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn),指示所述請(qǐng)求節(jié)點(diǎn)根據(jù)節(jié)點(diǎn)列表中的節(jié)點(diǎn)信息確定至少一個(gè)候選節(jié)點(diǎn)作為活動(dòng)節(jié)點(diǎn)。
2.如權(quán)利要求1所述的方法,其特征在于,Tracker選擇候選節(jié)點(diǎn)之后,并且將節(jié)點(diǎn)列 表返回給請(qǐng)求節(jié)點(diǎn)之前,所述方法還包括Tracker從所述候選節(jié)點(diǎn)中進(jìn)一步篩選出緩存的連續(xù)子塊的個(gè)數(shù)大于第一閾值的候 選節(jié)點(diǎn),所述連續(xù)子塊是指所述待下載數(shù)據(jù)的起始子塊之后且與起始子塊相鄰的連續(xù)子 塊;Tracker將節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)包括Tracker將進(jìn)一步篩選出的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)。
3.如權(quán)利要求1或2所述的方法,其特征在于,所述方法還包括 可選節(jié)點(diǎn)向Tracker上報(bào)緩存的子塊總個(gè)數(shù)信息;Tracker選擇候選節(jié)點(diǎn)之后,并且將節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)之前,所述方法還包括 Tracker從所述候選節(jié)點(diǎn)中進(jìn)一步篩選出緩存的子塊總個(gè)數(shù)大于第二閾值的候選節(jié)占.Tracker將節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)包括Tracker將進(jìn)一步篩選出的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)。
4.如權(quán)利要求3所述的方法,其特征在于,所述進(jìn)一步篩選出的候選節(jié)點(diǎn)中緩存的子塊是指待下載數(shù)據(jù)的起始子塊之后的所有 子塊。
5.如權(quán)利要求1、2或3所述的方法,其特征在于,所述方法還包括可選節(jié)點(diǎn)向Tracker上報(bào)連接節(jié)點(diǎn)個(gè)數(shù)是否飽和的信息,或已連接的節(jié)點(diǎn)個(gè)數(shù)及能夠 連接的最大節(jié)點(diǎn)個(gè)數(shù),所述連接節(jié)點(diǎn)個(gè)數(shù)是指從可選節(jié)點(diǎn)處獲取數(shù)據(jù)的其他節(jié)點(diǎn)個(gè)數(shù); Tracker選擇候選節(jié)點(diǎn)之后,并且將節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)之前,所述方法還包括 Tracker從所述候選節(jié)點(diǎn)中進(jìn)一步篩選出連接節(jié)點(diǎn)個(gè)數(shù)未飽和的候選節(jié)點(diǎn); Tracker將節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)包括Tracker將進(jìn)一步篩選出的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)。
6.如權(quán)利要求1或5所述的方法,其特征在于,選擇出候選節(jié)點(diǎn)之后,將節(jié)點(diǎn)列表返回 給請(qǐng)求節(jié)點(diǎn)之前,所述方法還包括當(dāng)候選節(jié)點(diǎn)個(gè)數(shù)大于最大值時(shí),Tracker對(duì)候選節(jié)點(diǎn)再次進(jìn)行挑選,再次挑選后的候選 節(jié)點(diǎn)個(gè)數(shù)不大于所述最大值;Tracker將節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)包括Tracker將再次挑選后的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)。
7.如權(quán)利要求2所述的方法,其特征在于,選擇出候選節(jié)點(diǎn)之后,將節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)之前,所述方法還包括當(dāng)候選節(jié)點(diǎn)個(gè)數(shù)大于最大值時(shí),Tracker按照緩存的連續(xù)子塊的個(gè)數(shù)由大到小的順序 對(duì)候選節(jié)點(diǎn)進(jìn)行排序,再次挑選前N個(gè)候選節(jié)點(diǎn),所述N為正整數(shù)且不大于最大值; Tracker將節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)包括Tracker將再次挑選的N個(gè)候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)。
8.如權(quán)利要求4所述的方法,其特征在于,進(jìn)一步篩選出候選節(jié)點(diǎn)之后,將節(jié)點(diǎn)列表返 回給請(qǐng)求節(jié)點(diǎn)之前,所述方法還包括在進(jìn)一步篩選出的候選節(jié)點(diǎn)個(gè)數(shù)大于最大值時(shí),Tracker按照待下載數(shù)據(jù)的子塊總個(gè) 數(shù)由大到小的順序?qū)蜻x節(jié)點(diǎn)進(jìn)行排序,再次挑選前M個(gè)候選節(jié)點(diǎn),所述M為正整數(shù)且不大 于最大值;Tracker將節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)包括Tracker將再次挑選的M個(gè)候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)。
9.一種在P2P流媒體系統(tǒng)中查找活動(dòng)節(jié)點(diǎn)的系統(tǒng),其特征在于,所述系統(tǒng)包括請(qǐng)求節(jié) 點(diǎn)、可選節(jié)點(diǎn)和Tracker,其中可選節(jié)點(diǎn),用于向Tracker上報(bào)緩存的連續(xù)子塊的個(gè)數(shù)以及所述連續(xù)子塊中第一個(gè)子 塊的序號(hào);請(qǐng)求節(jié)點(diǎn),用于向Tracker發(fā)送節(jié)點(diǎn)列表請(qǐng)求,并根據(jù)Tracker返回的節(jié)點(diǎn)列表中的節(jié) 點(diǎn)信息,確定至少一個(gè)候選節(jié)點(diǎn)作為活動(dòng)節(jié)點(diǎn);Tracker,用于在接收到節(jié)點(diǎn)列表請(qǐng)求后,根據(jù)節(jié)點(diǎn)列表請(qǐng)求中包含的請(qǐng)求節(jié)點(diǎn)待下載 數(shù)據(jù)的起始子塊序號(hào),選擇多個(gè)可選節(jié)點(diǎn)作為候選節(jié)點(diǎn),其中,候選節(jié)點(diǎn)中緩存了所述待下 載數(shù)據(jù)的起始子塊,并將選擇的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)。
10.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述可選節(jié)點(diǎn),還用于向Tracker上報(bào)以下信息中的一種或多種的組合 可選節(jié)點(diǎn)連接節(jié)點(diǎn)個(gè)數(shù)是否飽和; 可選節(jié)點(diǎn)緩存的子塊總個(gè)數(shù)信息。
11.如權(quán)利要求9所述的系統(tǒng),其特征在于,Tracker,還用于按照下列條件中的一種或多種選擇候選節(jié)點(diǎn) 候選節(jié)點(diǎn)連接節(jié)點(diǎn)個(gè)數(shù)未飽,所述連接節(jié)點(diǎn)個(gè)數(shù)是從候選節(jié)點(diǎn)處獲取數(shù)據(jù)的其他節(jié)點(diǎn) 個(gè)數(shù);候選節(jié)點(diǎn)中緩存的連續(xù)子塊的個(gè)數(shù)大于第一閾值; 候選節(jié)點(diǎn)中緩存的子塊總個(gè)數(shù)大于第二閾值。
12.—種追蹤設(shè)備,應(yīng)用于P2P流媒體系統(tǒng)中,其特征在于,所述追蹤設(shè)備包括請(qǐng)求接收模塊,用于接收節(jié)點(diǎn)列表請(qǐng)求,所述節(jié)點(diǎn)列表請(qǐng)求中包含的請(qǐng)求節(jié)點(diǎn)待下載 數(shù)據(jù)的起始子塊序號(hào);信息接收模塊,用于接收可選節(jié)點(diǎn)上報(bào)的緩存的連續(xù)子塊的個(gè)數(shù)以及所述連續(xù)子塊中 第一個(gè)子塊的序號(hào);第一選擇模塊,用于根據(jù)待下載數(shù)據(jù)的起始子塊序號(hào),選擇多個(gè)可選節(jié)點(diǎn)作為候選節(jié) 點(diǎn),其中,候選節(jié)點(diǎn)中緩存了所述待下載數(shù)據(jù)的起始子塊;列表發(fā)送模塊,用于將選擇的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息通過(guò)節(jié)點(diǎn)列表返回給請(qǐng)求節(jié)點(diǎn)。
13.如權(quán)利要求12所述的追蹤設(shè)備,其特征在于,所述第一選擇模塊,還用于從候選節(jié)點(diǎn)中進(jìn)一步篩選出緩存的連續(xù)子塊的個(gè)數(shù)大于第 一閾值的候選節(jié)點(diǎn),所述連續(xù)子塊是指所述待下載數(shù)據(jù)的起始子塊之后且與起始子塊相 鄰的連續(xù)子塊。
14.如權(quán)利要求12或13所述的追蹤設(shè)備,其特征在于,所述信息接收模塊,還用于接收可選節(jié)點(diǎn)上報(bào)的緩存的子塊總個(gè)數(shù)信息;所述第一選擇模塊,還用于從候選節(jié)點(diǎn)中進(jìn)一步篩選出緩存的子塊總個(gè)數(shù)大于第二閾 值的候選節(jié)點(diǎn),所述進(jìn)一步篩選出的候選節(jié)點(diǎn)中緩存的子塊是指待下載數(shù)據(jù)的起始子塊 之后的所有子塊。
15.如權(quán)利要求12、13或14所述的追蹤設(shè)備,其特征在于,所述信息接收模塊,還用于接收可選節(jié)點(diǎn)上報(bào)的連接節(jié)點(diǎn)個(gè)數(shù)是否飽和的信息,或已 連接的節(jié)點(diǎn)個(gè)數(shù)及能夠連接的最大節(jié)點(diǎn)個(gè)數(shù),所述連接節(jié)點(diǎn)個(gè)數(shù)是指從可選節(jié)點(diǎn)處獲取 數(shù)據(jù)的其他節(jié)點(diǎn)個(gè)數(shù);所述第一選擇模塊,還用于從候選節(jié)點(diǎn)中進(jìn)一步篩選出連接節(jié)點(diǎn)個(gè)數(shù)未飽和的候選節(jié)點(diǎn)ο
16.如權(quán)利要求12或15所述的追蹤設(shè)備,其特征在于,所述追蹤設(shè)備還包括第二選擇模塊,用于在第一選擇模塊選擇的候選節(jié)點(diǎn)個(gè)數(shù)大于最大值時(shí),對(duì)選擇的候 選節(jié)點(diǎn)再次進(jìn)行挑選,并將再次挑選的候選節(jié)點(diǎn)的節(jié)點(diǎn)信息發(fā)送給列表發(fā)送模塊,其中再 次挑選的候選節(jié)點(diǎn)個(gè)數(shù)不大于最大值。
17.如權(quán)利要求13所述的追蹤設(shè)備,其特征在于,所述追蹤設(shè)備還包括第二選擇模塊,用于在第一選擇模塊選擇的候選節(jié)點(diǎn)個(gè)數(shù)大于最大值時(shí),按照緩存的 連續(xù)子塊的個(gè)數(shù)由大到小的順序,對(duì)選擇的候選節(jié)點(diǎn)進(jìn)行排序,再次挑選前N個(gè)候選節(jié)點(diǎn), 并將再次挑選的N個(gè)候選節(jié)點(diǎn)的節(jié)點(diǎn)信息發(fā)送給列表發(fā)送模塊,所述N為正整數(shù)且不大于 最大值。
18.如權(quán)利要求14所述的追蹤設(shè)備,其特征在于,所述追蹤設(shè)備還包括第二選擇模塊,用于在第一選擇模塊選擇的候選節(jié)點(diǎn)個(gè)數(shù)大于最大值時(shí),按照待下載 數(shù)據(jù)的子塊總個(gè)數(shù)由大到小的順序,對(duì)選擇的候選節(jié)點(diǎn)進(jìn)行排序,再次挑選前M個(gè)候選節(jié) 點(diǎn),并將再次挑選的M個(gè)候選節(jié)點(diǎn)的節(jié)點(diǎn)信息發(fā)送給列表發(fā)送模塊,所述M為正整數(shù)且不大 于最大值。
19.一種節(jié)點(diǎn)設(shè)備,其特征在于,所述節(jié)點(diǎn)設(shè)備包括信息上報(bào)模塊,用于向Tracker上報(bào)緩存的連續(xù)子塊的個(gè)數(shù)以及所述連續(xù)子塊中第一 個(gè)子塊的序號(hào);數(shù)據(jù)輸出模塊,用于根據(jù)其他節(jié)點(diǎn)設(shè)備的請(qǐng)求向其他節(jié)點(diǎn)設(shè)備上載數(shù)據(jù)。
20.如權(quán)利要求19所述的節(jié)點(diǎn)設(shè)備,其特征在于,所述信息上報(bào)模塊,還用于向Tracker上報(bào)以下信息中的一種或多種的組合節(jié)點(diǎn)設(shè)備連接節(jié)點(diǎn)個(gè)數(shù)是否飽和;節(jié)點(diǎn)設(shè)備緩存的子塊總個(gè)數(shù)信息。
全文摘要
本發(fā)明公開(kāi)了一種在P2P流媒體系統(tǒng)中查找活動(dòng)節(jié)點(diǎn)的方法,由可選節(jié)點(diǎn)精簡(jiǎn)、高效地向追蹤設(shè)備上報(bào)自身的子塊信息,如緩存的連續(xù)子塊的個(gè)數(shù)、所述連續(xù)子塊中第一個(gè)子塊的序號(hào)以及緩存的子塊總個(gè)數(shù)信息等,追蹤設(shè)備在為請(qǐng)求節(jié)點(diǎn)選擇合適的候選節(jié)點(diǎn)時(shí),利用可選節(jié)點(diǎn)的子塊信息,選擇滿足設(shè)定條件的候選節(jié)點(diǎn),指示請(qǐng)求節(jié)點(diǎn)從候選節(jié)點(diǎn)中確定至少一個(gè)候選節(jié)點(diǎn)作為活動(dòng)節(jié)點(diǎn)。通過(guò)本發(fā)明,可選節(jié)點(diǎn)可以通過(guò)較少的字節(jié)向追蹤設(shè)備上報(bào)完備的子塊信息進(jìn)而選擇出合適的候選節(jié)點(diǎn),使得請(qǐng)求節(jié)點(diǎn)不需要向候選節(jié)點(diǎn)發(fā)送大量的探測(cè)就能夠確定活動(dòng)節(jié)點(diǎn),避免了通信資源的浪費(fèi),減少了帶寬消耗。本發(fā)明還公開(kāi)了一種P2P流媒體系統(tǒng)中查找活動(dòng)節(jié)點(diǎn)的系統(tǒng)及設(shè)備。
文檔編號(hào)H04L29/06GK101924777SQ20091008667
公開(kāi)日2010年12月22日 申請(qǐng)日期2009年6月17日 優(yōu)先權(quán)日2009年6月17日
發(fā)明者張?jiān)骑w, 彭晉, 段曉東, 鄧光青, 魏冰 申請(qǐng)人:中國(guó)移動(dòng)通信集團(tuán)公司