專利名稱:創(chuàng)建點(diǎn)對點(diǎn)數(shù)據(jù)通道的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)領(lǐng)域,特別是一種創(chuàng)建點(diǎn)對點(diǎn)數(shù)據(jù)通道的方法。
背景技術(shù):
點(diǎn)對點(diǎn)(Peer-to-Peer,P2P)網(wǎng)絡(luò)是一種分布式網(wǎng)絡(luò),P2P網(wǎng)絡(luò)中的節(jié)點(diǎn)(Peer)既是資源的提供者也是資源的享受者,所有節(jié)點(diǎn)的資源都在該網(wǎng)絡(luò)里面共享。最典型的是P2P下載,在P2P下載中某個(gè)節(jié)點(diǎn)在從別的節(jié)點(diǎn)下載文件的同時(shí),它所共享的文件也被別的節(jié)點(diǎn)所下載。
P2P網(wǎng)絡(luò)根據(jù)其拓?fù)浣Y(jié)構(gòu)可以分為4種形式中心化拓?fù)浣Y(jié)構(gòu)、全分布式非結(jié)構(gòu)化拓?fù)浣Y(jié)構(gòu)、全分布式結(jié)構(gòu)化拓?fù)浣Y(jié)構(gòu)和半分布式拓?fù)浣Y(jié)構(gòu)。下面介紹與本發(fā)明相關(guān)的半分布式拓?fù)洹?br>
參見圖1,在半分布式拓?fù)浣Y(jié)構(gòu)中,一些在處理、存儲、帶寬等方面性能較高的節(jié)點(diǎn)被選作超級節(jié)點(diǎn)(SuperPeer),在各個(gè)超級節(jié)點(diǎn)下掛著一定數(shù)量的普通節(jié)點(diǎn),超級節(jié)點(diǎn)還存儲著系統(tǒng)中其他部分節(jié)點(diǎn)的信息,超級節(jié)點(diǎn)負(fù)責(zé)處理或轉(zhuǎn)發(fā)它底下所掛Peer的請求。半分布式拓?fù)浣Y(jié)構(gòu)也是一個(gè)層次式結(jié)構(gòu),超級節(jié)點(diǎn)之間構(gòu)成一個(gè)高速轉(zhuǎn)發(fā)層,而超級節(jié)點(diǎn)和所負(fù)責(zé)的普通節(jié)點(diǎn)構(gòu)成若干層次。
為了實(shí)現(xiàn)多種應(yīng)用,需要在相應(yīng)的Peer之間創(chuàng)建數(shù)據(jù)通道。圖2所示的是現(xiàn)有技術(shù)中在兩個(gè)Peer之間創(chuàng)建數(shù)據(jù)通道的過程。參照圖2,在該P(yáng)2P網(wǎng)絡(luò)中,PeerA的超級節(jié)點(diǎn)為SuperPeerA,PeerB的超級節(jié)點(diǎn)為SuperPeerB,圖2中還給出了服務(wù)器和PeerC,其中服務(wù)器中保存有各節(jié)點(diǎn)的超級節(jié)點(diǎn)信息和中轉(zhuǎn)節(jié)點(diǎn)信息,PeerC為PeerA的中轉(zhuǎn)節(jié)點(diǎn)。
如圖2所示,現(xiàn)有技術(shù)中創(chuàng)建PeerA到PeerB的數(shù)據(jù)通道的過程包括如下步驟步驟101,PeerA向SuperPeerA發(fā)送查找PeerB的請求。
步驟102,SuperPeerA將該查找請求轉(zhuǎn)發(fā)給Server。
步驟103,Server根據(jù)該查找請求將PeerB及其超級節(jié)點(diǎn)SuperPeerB的網(wǎng)絡(luò)信息返回給SuperPeerA。
步驟104,SuperPeerA將Server返回的結(jié)果返回給PeerA。
步驟105,PeerA收到PeerB和SuperPeerB的網(wǎng)絡(luò)信息之后,根據(jù)PeerB的網(wǎng)絡(luò)信息向PeerB發(fā)送數(shù)據(jù)包,嘗試跟PeerB創(chuàng)建直連數(shù)據(jù)通道。如果PeerB收到PeerA的數(shù)據(jù)包,會給PeerA發(fā)送數(shù)據(jù)包,以確定可以創(chuàng)建直連數(shù)據(jù)通道。
PeerA如果在預(yù)定的時(shí)間內(nèi)收到PeerB返回的數(shù)據(jù)包,則表示直連成功,即創(chuàng)建通道成功,結(jié)束流程;如果在預(yù)定時(shí)間內(nèi)未收到PeerB返回的數(shù)據(jù)包,則表示直連失敗,執(zhí)行步驟106。
步驟106,PeerA向SuperPeerA發(fā)送獲取中轉(zhuǎn)Peer請求。
步驟107,SuperPeerA將該請求轉(zhuǎn)發(fā)給Server。
步驟108,Server根據(jù)該請求將中轉(zhuǎn)PeerC的網(wǎng)絡(luò)信息返回給SuperPeerA。
步驟109,SuperPeerA將Server返回的結(jié)果返回給PeerA。
步驟110,PeerA收到中轉(zhuǎn)PeerC的網(wǎng)絡(luò)信息后,根據(jù)PeerC的網(wǎng)絡(luò)信息向PeerC發(fā)送數(shù)據(jù)包,嘗試連接PeerC,同時(shí)將PeerC的網(wǎng)絡(luò)信息發(fā)送給PeerB的超級節(jié)點(diǎn)SuperPeerB。
步驟111,SuperPeerB將PeerC的網(wǎng)絡(luò)信息轉(zhuǎn)發(fā)給PeerB。
步驟112,PeerB收到PeerC的網(wǎng)絡(luò)信息之后,根據(jù)PeerC的網(wǎng)絡(luò)信息向PeerC發(fā)送數(shù)據(jù)包,嘗試連接PeerC。如果PeerC收到PeerA和PeerB的數(shù)據(jù)包后,會給PeerA和PeerB發(fā)送數(shù)據(jù)包,以確定通過PeerC可以創(chuàng)建中轉(zhuǎn)數(shù)據(jù)通道。
最后,PeerA如果在預(yù)定時(shí)間內(nèi)收到了PeerC發(fā)送來的數(shù)據(jù)包,則表示PeerA和PeerB可以通過PeerC建立中轉(zhuǎn)數(shù)據(jù)通道,即PeerA和PeerB之間的數(shù)據(jù)通道創(chuàng)建成功;否則,表明PeerA和PeerB通過PeerC創(chuàng)建中轉(zhuǎn)數(shù)據(jù)通道失敗,即PeerA和PeerB之間創(chuàng)建數(shù)據(jù)通道失敗。
在上面的流程中,步驟101至步驟104為查找網(wǎng)絡(luò)信息環(huán)節(jié),步驟105為創(chuàng)建直連數(shù)據(jù)通道環(huán)節(jié),步驟106至步驟109為獲取中轉(zhuǎn)Peer環(huán)節(jié),步驟110至步驟112為創(chuàng)建中轉(zhuǎn)數(shù)據(jù)通道環(huán)節(jié)。
從現(xiàn)有技術(shù)可以看出,上述各個(gè)環(huán)節(jié)是串行的,如果每個(gè)環(huán)節(jié)需要10秒,則整個(gè)創(chuàng)建數(shù)據(jù)通道的過程需要花費(fèi)40秒。這對于實(shí)時(shí)性要求較高的場合是不適用的,即使在一些實(shí)時(shí)性要求不高的場合中可以使用,但是也浪費(fèi)了時(shí)間。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提出了一種創(chuàng)建P2P數(shù)據(jù)通道的方法,用以縮短創(chuàng)建數(shù)據(jù)通道的時(shí)間。
根據(jù)上述目的,本發(fā)明提供了一種創(chuàng)建P2P數(shù)據(jù)通道的方法,該方法包括以下步驟根據(jù)上述目的,本發(fā)明提供了一種創(chuàng)建P2P數(shù)據(jù)通道的方法,該方法包括以下步驟A.第一節(jié)點(diǎn)同時(shí)向第二節(jié)點(diǎn)和第一中轉(zhuǎn)節(jié)點(diǎn)發(fā)送數(shù)據(jù)包,并將第一中轉(zhuǎn)節(jié)點(diǎn)的網(wǎng)絡(luò)信息發(fā)送給第二節(jié)點(diǎn)的超級節(jié)點(diǎn);B.第一節(jié)點(diǎn)判斷在預(yù)定時(shí)間內(nèi)是否收到第二節(jié)點(diǎn)和/或第一中轉(zhuǎn)節(jié)點(diǎn)的數(shù)據(jù)包,如果收到來自第二節(jié)點(diǎn)和第一中轉(zhuǎn)節(jié)點(diǎn)中至少一個(gè)的數(shù)據(jù)包,則根據(jù)所收到的數(shù)據(jù)包創(chuàng)建數(shù)據(jù)通道。
步驟A之前進(jìn)一步包括A1.第一節(jié)點(diǎn)發(fā)送查找第二節(jié)點(diǎn)的請求給第一節(jié)點(diǎn)的超級節(jié)點(diǎn),第一節(jié)點(diǎn)的超級節(jié)點(diǎn)將該查找請求轉(zhuǎn)發(fā)給服務(wù)器;A2.服務(wù)器返回第二節(jié)點(diǎn)和第二節(jié)點(diǎn)的超級節(jié)點(diǎn)的網(wǎng)絡(luò)信息給第一節(jié)點(diǎn)的超級節(jié)點(diǎn),第一節(jié)點(diǎn)的超級節(jié)點(diǎn)將所述網(wǎng)絡(luò)信息返回給第一節(jié)點(diǎn)。
步驟A之前進(jìn)一步包括第一節(jié)點(diǎn)通過第一節(jié)點(diǎn)的超級節(jié)點(diǎn)到服務(wù)器獲取一個(gè)或一個(gè)以上中轉(zhuǎn)節(jié)點(diǎn)的步驟,所述一個(gè)或一個(gè)以上中轉(zhuǎn)節(jié)點(diǎn)至少包括所述第一中轉(zhuǎn)節(jié)點(diǎn)。
步驟A之后進(jìn)一步包括如果第二節(jié)點(diǎn)接收到第一節(jié)點(diǎn)的數(shù)據(jù)包,則向第一節(jié)點(diǎn)發(fā)送數(shù)據(jù)包。
步驟A之后進(jìn)一步包括第二節(jié)點(diǎn)的超級節(jié)點(diǎn)將第一中轉(zhuǎn)節(jié)點(diǎn)的網(wǎng)絡(luò)信息轉(zhuǎn)發(fā)給第二節(jié)點(diǎn),第二節(jié)點(diǎn)根據(jù)第一中轉(zhuǎn)節(jié)點(diǎn)的網(wǎng)絡(luò)信息向第一中轉(zhuǎn)節(jié)點(diǎn)發(fā)送數(shù)據(jù)包;如果第一中轉(zhuǎn)節(jié)點(diǎn)接收到第一節(jié)點(diǎn)和第二節(jié)點(diǎn)的數(shù)據(jù)包,則分別向第一節(jié)點(diǎn)和第二節(jié)點(diǎn)發(fā)送數(shù)據(jù)包。
步驟B中所述根據(jù)所收到的數(shù)據(jù)包創(chuàng)建數(shù)據(jù)通道的步驟包括如果收到來自第二節(jié)點(diǎn)的數(shù)據(jù)包和來自第一中轉(zhuǎn)節(jié)點(diǎn)的數(shù)據(jù)包,則確定其中一個(gè)數(shù)據(jù)包對應(yīng)的數(shù)據(jù)通道為最終創(chuàng)建的數(shù)據(jù)通道而刪除另一個(gè)數(shù)據(jù)通道;如果只收到來自第二節(jié)點(diǎn)和第一中轉(zhuǎn)節(jié)點(diǎn)其中一個(gè)的數(shù)據(jù)包,則確定所收到的數(shù)據(jù)包對應(yīng)的數(shù)據(jù)通道為最終創(chuàng)建的數(shù)據(jù)通道。
步驟B中所述確定其中一個(gè)數(shù)據(jù)包對應(yīng)的數(shù)據(jù)通道為最終創(chuàng)建的數(shù)據(jù)通道而刪除另一個(gè)數(shù)據(jù)通道的步驟為確定來自第二節(jié)點(diǎn)的數(shù)據(jù)包對應(yīng)的直連數(shù)據(jù)通道為最終創(chuàng)建的數(shù)據(jù)通道,刪除經(jīng)過第一中轉(zhuǎn)節(jié)點(diǎn)的中轉(zhuǎn)數(shù)據(jù)通道。
步驟B進(jìn)一步包括如果沒有收到來自第二節(jié)點(diǎn)或第一中轉(zhuǎn)節(jié)點(diǎn)的數(shù)據(jù)包,則創(chuàng)建數(shù)據(jù)通道失敗。
從上述方案中可以看出,由于在本發(fā)明中同時(shí)嘗試創(chuàng)建直連數(shù)據(jù)通道和中轉(zhuǎn)數(shù)據(jù)通道,即創(chuàng)建直連數(shù)據(jù)通道和中轉(zhuǎn)數(shù)據(jù)通道是并行的,這樣可以減少整個(gè)流程的時(shí)間。并且在直連數(shù)據(jù)通道和中轉(zhuǎn)數(shù)據(jù)通道都成功創(chuàng)建的情況下,刪除多余通道是在創(chuàng)建通道成功之后進(jìn)行的,也不占用創(chuàng)建通道時(shí)間。進(jìn)一步,本發(fā)明還在創(chuàng)建通道之前進(jìn)行預(yù)取中轉(zhuǎn)Peer的環(huán)節(jié),也不占用創(chuàng)建時(shí)間。假設(shè)查找網(wǎng)絡(luò)信息環(huán)節(jié)、創(chuàng)建直連數(shù)據(jù)通道環(huán)節(jié)、創(chuàng)建中轉(zhuǎn)數(shù)據(jù)通道環(huán)節(jié)以及獲取中轉(zhuǎn)Peer環(huán)節(jié)分別需要10秒,則根據(jù)本發(fā)明的方案,整個(gè)流程只需要20秒,與現(xiàn)有技術(shù)的40秒相比,大大縮短了創(chuàng)建通道的時(shí)間,從而可以適用于各種實(shí)時(shí)性要求較高的場合。
圖1為P2P網(wǎng)絡(luò)半分布式拓?fù)浣Y(jié)構(gòu)的示意圖。
圖2為現(xiàn)有技術(shù)中創(chuàng)建數(shù)據(jù)通道的流程示意圖。
圖3為本發(fā)明第一實(shí)施例的流程示意圖。
圖4為本發(fā)明第二實(shí)施例的流程示意圖。
具體實(shí)施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,以下舉實(shí)施例對本發(fā)明進(jìn)一步詳細(xì)說明。
本發(fā)明與現(xiàn)有技術(shù)的不同在于,本發(fā)明將獲取中轉(zhuǎn)Peer等在創(chuàng)建數(shù)據(jù)通道之前預(yù)先完成,并且在創(chuàng)建數(shù)據(jù)通道過程中同時(shí)嘗試創(chuàng)建直連數(shù)據(jù)通道和中轉(zhuǎn)數(shù)據(jù)通道,如果兩者都成功創(chuàng)建則選擇其中的一種為最后創(chuàng)建的數(shù)據(jù)通道,如果一種成功則將其作為成功創(chuàng)建的數(shù)據(jù)通道。這樣大大縮短了在創(chuàng)建P2P數(shù)據(jù)通道中所花費(fèi)的時(shí)間。
圖3為本發(fā)明第一實(shí)施例的流程示意圖。參見圖3,本發(fā)明第一實(shí)施例中的網(wǎng)絡(luò)結(jié)構(gòu)與現(xiàn)有技術(shù)相同,在該網(wǎng)絡(luò)中,包括Server、PeerA和PeerA的超級節(jié)點(diǎn)SuperPeerA、PeerB和PeerB的超級節(jié)點(diǎn)SuperPeerB以及PeerA的中轉(zhuǎn)PeerC。Server中保存有各節(jié)點(diǎn)的超級節(jié)點(diǎn)信息和中轉(zhuǎn)節(jié)點(diǎn)信息。
參照圖3,本發(fā)明第一實(shí)施例包括以下步驟在創(chuàng)建數(shù)據(jù)通道之前,PeerA預(yù)先通過SuperPeerA從Server獲取中轉(zhuǎn)Peer。過程如下PeerA向SuperPeerA發(fā)送獲取中轉(zhuǎn)Peer請求;SuperPeerA將該請求轉(zhuǎn)發(fā)給Server;Server根據(jù)該獲取請求將中轉(zhuǎn)PeerC的網(wǎng)絡(luò)信息返回給SuperPeerA;SuperPeerA將Server返回的結(jié)果返回給PeerA。優(yōu)選地,PeerA可以在空閑的時(shí)候獲取中轉(zhuǎn)Peer,或者可以定期地獲取中轉(zhuǎn)Peer。當(dāng)然,還可以通過其它方法預(yù)先在PeerA中保存中轉(zhuǎn)Peer的網(wǎng)絡(luò)信息。
在創(chuàng)建PeerA和PeerB的數(shù)據(jù)通道的過程中執(zhí)行以下步驟步驟201,PeerA向SuperPeerA發(fā)送查找PeerB的請求。
步驟202,SuperPeerA將該查找請求轉(zhuǎn)發(fā)給Server。
步驟203,Server根據(jù)該查找請求將PeerB及其超級節(jié)點(diǎn)SuperPeerB的網(wǎng)絡(luò)信息返回給SuperPeerA。
步驟204,SuperPeerA將Server返回的結(jié)果返回給PeerA。
步驟205,PeerA收到PeerB和SuperPeerB的網(wǎng)絡(luò)信息之后,根據(jù)PeerB的網(wǎng)絡(luò)信息向PeerB發(fā)送數(shù)據(jù)包,嘗試跟PeerB創(chuàng)建直連數(shù)據(jù)通道。如果PeerB收到PeerA的數(shù)據(jù)包,會給PeerA發(fā)送數(shù)據(jù)包,以確定可以創(chuàng)建直連數(shù)據(jù)通道。
與此同時(shí),PeerA根據(jù)預(yù)先獲取的中轉(zhuǎn)PeerC的網(wǎng)絡(luò)信息向PeerC發(fā)送數(shù)據(jù)包,嘗試連接PeerC。PeerA同時(shí)還將PeerC的網(wǎng)絡(luò)信息發(fā)送給PeerB的超級節(jié)點(diǎn)SuperPeerB。
步驟206,SuperPeerB將PeerC的網(wǎng)絡(luò)信息轉(zhuǎn)發(fā)給PeerB。
步驟207,PeerB收到PeerC的網(wǎng)絡(luò)信息之后,根據(jù)PeerC的網(wǎng)絡(luò)信息向PeerC發(fā)送數(shù)據(jù)包,嘗試連接PeerC。如果PeerC收到PeerA和PeerB的數(shù)據(jù)包后,會給PeerA和PeerB發(fā)送數(shù)據(jù)包,以確定可以通過PeerC創(chuàng)建中轉(zhuǎn)數(shù)據(jù)通道。
最后,PeerA判斷在預(yù)定時(shí)間內(nèi)是否收到PeerB和/或PeerC返回的數(shù)據(jù)包,如果在預(yù)定的時(shí)間內(nèi)收到PeerB返回的數(shù)據(jù)包而沒有收到PeerC返回的數(shù)據(jù)包,則表示可以創(chuàng)建直連數(shù)據(jù)通道而不可以創(chuàng)建中轉(zhuǎn)數(shù)據(jù)通道,以直連數(shù)據(jù)通道作為最后成功創(chuàng)建的數(shù)據(jù)通道;如果在預(yù)定的時(shí)間內(nèi)收到PeerC返回的數(shù)據(jù)包而沒有收到PeerB返回的數(shù)據(jù)包,則表示可以創(chuàng)建中轉(zhuǎn)數(shù)據(jù)通道而不可以創(chuàng)建直連數(shù)據(jù)通道,以中轉(zhuǎn)數(shù)據(jù)通道作為最后成功創(chuàng)建的數(shù)據(jù)通道;如果在預(yù)定的時(shí)間內(nèi)收到PeerB返回的數(shù)據(jù)包也收到PeerC返回的數(shù)據(jù)包,則表示可以創(chuàng)建直連數(shù)據(jù)通道并且也可以創(chuàng)建中轉(zhuǎn)數(shù)據(jù)通道,PeerA可以選擇其中任意一個(gè)作為最后成功創(chuàng)建的數(shù)據(jù)通道,并刪除多余的數(shù)據(jù)通道,優(yōu)選選擇直連數(shù)據(jù)通道而刪除中轉(zhuǎn)數(shù)據(jù)通道;如果在預(yù)定的時(shí)間內(nèi)既沒有收到PeerB返回的數(shù)據(jù)包也沒有收到PeerC發(fā)送來的數(shù)據(jù)包,則表示創(chuàng)建直連數(shù)據(jù)通道失敗并且創(chuàng)建中轉(zhuǎn)數(shù)據(jù)通道也失敗,即沒有成功創(chuàng)建PeerA與PeerB的數(shù)據(jù)通道。
在創(chuàng)建任意兩個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)通道時(shí)都可以使用本發(fā)明的方法,例如在創(chuàng)建PeerA與中轉(zhuǎn)PeerC之間的數(shù)據(jù)通道或者創(chuàng)建PeerB與中轉(zhuǎn)PeerC之間的數(shù)據(jù)通道時(shí)也可以使用本發(fā)明的方法。
在本發(fā)明的第二實(shí)施例中,進(jìn)一步通過參照圖4描述創(chuàng)建PeerB與中轉(zhuǎn)PeerC之間數(shù)據(jù)通道的流程來闡述本發(fā)明的方法。圖4與圖3相比,進(jìn)一步給出了PeerC的超級節(jié)點(diǎn)SuperPeerC以及PeerB的中轉(zhuǎn)節(jié)點(diǎn)PeerD。
如圖4所示,本發(fā)明的第二實(shí)施例包括在創(chuàng)建數(shù)據(jù)通道之前,PeerB預(yù)先通過SuperPeerB從Server獲取中轉(zhuǎn)Peer。過程如下PeerB向SuperPeerB發(fā)送獲取中轉(zhuǎn)Peer請求;SuperPeerB將該請求轉(zhuǎn)發(fā)給Server;Server根據(jù)該獲取請求將中轉(zhuǎn)PeerD的網(wǎng)絡(luò)信息返回給SuperPeerB;SuperPeerB將Server返回的結(jié)果返回給PeerB。優(yōu)選地,PeerB可以在空閑的時(shí)候獲取中轉(zhuǎn)Peer,或者可以定期地獲取中轉(zhuǎn)Peer。當(dāng)然,還可以通過其它方法預(yù)先在PeerB中保存中轉(zhuǎn)Peer的網(wǎng)絡(luò)信息。
在創(chuàng)建PeerB和PeerC的數(shù)據(jù)通道的過程中執(zhí)行以下步驟步驟301,PeerB向SuperPeerB發(fā)送查找PeerC的請求。
步驟302,SuperPeerB將該查找請求轉(zhuǎn)發(fā)給Server。
步驟303,Server根據(jù)該查找請求將PeerC及其超級節(jié)點(diǎn)SuperPeerC的網(wǎng)絡(luò)信息返回給SuperPeerB。
步驟304,SuperPeerB將Server返回的結(jié)果返回給PeerB。
步驟305,PeerB收到PeerC和SuperPeerC的網(wǎng)絡(luò)信息之后,根據(jù)PeerC的網(wǎng)絡(luò)信息向PeerC發(fā)送數(shù)據(jù)包,嘗試跟PeerC創(chuàng)建直連數(shù)據(jù)通道。如果PeerC收到PeerB的數(shù)據(jù)包,會給PeerB發(fā)送數(shù)據(jù)包,以確定可以創(chuàng)建直連數(shù)據(jù)通道。
與此同時(shí),PeerB根據(jù)預(yù)先獲取的中轉(zhuǎn)PeerD的網(wǎng)絡(luò)信息向PeerD發(fā)送數(shù)據(jù)包,嘗試連接PeerD。PeerB同時(shí)還將PeerD的網(wǎng)絡(luò)信息發(fā)送給PeerC的超級節(jié)點(diǎn)SuperPeerC。
步驟306,SuperPeerC將PeerD的網(wǎng)絡(luò)信息轉(zhuǎn)發(fā)給PeerC。
步驟307,PeerC收到PeerD的網(wǎng)絡(luò)信息之后,根據(jù)PeerD的網(wǎng)絡(luò)信息向PeerD發(fā)送數(shù)據(jù)包,嘗試連接PeerD。如果PeerD收到PeerB和PeerC的數(shù)據(jù)包后,會給PeerB和PeerC發(fā)送數(shù)據(jù)包,以確定可以通過PeerD創(chuàng)建中轉(zhuǎn)數(shù)據(jù)通道。
最后,PeerB判斷在預(yù)定時(shí)間內(nèi)是否收到PeerC和/或PeerD返回的數(shù)據(jù)包,PeerB如果在預(yù)定的時(shí)間內(nèi)收到PeerC返回的數(shù)據(jù)包而沒有收到PeerD返回的數(shù)據(jù)包,則表示可以創(chuàng)建直連數(shù)據(jù)通道而不可以創(chuàng)建中轉(zhuǎn)數(shù)據(jù)通道,以直連數(shù)據(jù)通道作為最后成功創(chuàng)建的數(shù)據(jù)通道;如果在預(yù)定的時(shí)間內(nèi)收到PeerD返回的數(shù)據(jù)包而沒有收到PeerC返回的數(shù)據(jù)包,則表示可以創(chuàng)建中轉(zhuǎn)數(shù)據(jù)通道而不可以創(chuàng)建直連數(shù)據(jù)通道,以中轉(zhuǎn)數(shù)據(jù)通道作為最后成功創(chuàng)建的數(shù)據(jù)通道;如果在預(yù)定的時(shí)間內(nèi)收到PeerC返回的數(shù)據(jù)包也收到PeerD返回的數(shù)據(jù)包,則表示可以創(chuàng)建直連數(shù)據(jù)通道并且也可以創(chuàng)建中轉(zhuǎn)數(shù)據(jù)通道,PeerB可以選擇其中任意一個(gè)作為最后成功創(chuàng)建的數(shù)據(jù)通道,并刪除多余的數(shù)據(jù)通道,優(yōu)選選擇直連數(shù)據(jù)通道而刪除中轉(zhuǎn)數(shù)據(jù)通道;如果在預(yù)定的時(shí)間內(nèi)既沒有收到PeerC返回的數(shù)據(jù)包也沒有收到PeerD發(fā)送來的數(shù)據(jù)包,則表示創(chuàng)建直連數(shù)據(jù)通道失敗并且創(chuàng)建中轉(zhuǎn)數(shù)據(jù)通道也失敗,即沒有成功創(chuàng)建PeerB與PeerC的數(shù)據(jù)通道。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種創(chuàng)建點(diǎn)對點(diǎn)P2P數(shù)據(jù)通道的方法,其特征在于,該方法包括以下步驟A.第一節(jié)點(diǎn)同時(shí)向第二節(jié)點(diǎn)和第一中轉(zhuǎn)節(jié)點(diǎn)發(fā)送數(shù)據(jù)包,并將第一中轉(zhuǎn)節(jié)點(diǎn)的網(wǎng)絡(luò)信息發(fā)送給第二節(jié)點(diǎn)的超級節(jié)點(diǎn);B.第一節(jié)點(diǎn)判斷在預(yù)定時(shí)間內(nèi)是否收到第二節(jié)點(diǎn)和/或第一中轉(zhuǎn)節(jié)點(diǎn)的數(shù)據(jù)包,如果收到來自第二節(jié)點(diǎn)和第一中轉(zhuǎn)節(jié)點(diǎn)中至少一個(gè)的數(shù)據(jù)包,則根據(jù)所收到的數(shù)據(jù)包創(chuàng)建數(shù)據(jù)通道。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A之前進(jìn)一步包括A1.第一節(jié)點(diǎn)發(fā)送查找第二節(jié)點(diǎn)的請求給第一節(jié)點(diǎn)的超級節(jié)點(diǎn),第一節(jié)點(diǎn)的超級節(jié)點(diǎn)將該查找請求轉(zhuǎn)發(fā)給服務(wù)器;A2.服務(wù)器返回第二節(jié)點(diǎn)和第二節(jié)點(diǎn)的超級節(jié)點(diǎn)的網(wǎng)絡(luò)信息給第一節(jié)點(diǎn)的超級節(jié)點(diǎn),第一節(jié)點(diǎn)的超級節(jié)點(diǎn)將所述網(wǎng)絡(luò)信息返回給第一節(jié)點(diǎn)。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A之前進(jìn)一步包括第一節(jié)點(diǎn)通過第一節(jié)點(diǎn)的超級節(jié)點(diǎn)到服務(wù)器獲取一個(gè)或一個(gè)以上中轉(zhuǎn)節(jié)點(diǎn)的步驟,所述一個(gè)或一個(gè)以上中轉(zhuǎn)節(jié)點(diǎn)至少包括所述第一中轉(zhuǎn)節(jié)點(diǎn)。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A之后進(jìn)一步包括如果第二節(jié)點(diǎn)接收到第一節(jié)點(diǎn)的數(shù)據(jù)包,則向第一節(jié)點(diǎn)發(fā)送數(shù)據(jù)包。
5.根據(jù)權(quán)利要求1或4所述的方法,其特征在于,步驟A之后進(jìn)一步包括第二節(jié)點(diǎn)的超級節(jié)點(diǎn)將第一中轉(zhuǎn)節(jié)點(diǎn)的網(wǎng)絡(luò)信息轉(zhuǎn)發(fā)給第二節(jié)點(diǎn),第二節(jié)點(diǎn)根據(jù)第一中轉(zhuǎn)節(jié)點(diǎn)的網(wǎng)絡(luò)信息向第一中轉(zhuǎn)節(jié)點(diǎn)發(fā)送數(shù)據(jù)包;如果第一中轉(zhuǎn)節(jié)點(diǎn)接收到第一節(jié)點(diǎn)和第二節(jié)點(diǎn)的數(shù)據(jù)包,則分別向第一節(jié)點(diǎn)和第二節(jié)點(diǎn)發(fā)送數(shù)據(jù)包。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟B中所述根據(jù)所收到的數(shù)據(jù)包創(chuàng)建數(shù)據(jù)通道的步驟包括如果收到來自第二節(jié)點(diǎn)的數(shù)據(jù)包和來自第一中轉(zhuǎn)節(jié)點(diǎn)的數(shù)據(jù)包,則確定其中一個(gè)數(shù)據(jù)包對應(yīng)的數(shù)據(jù)通道為最終創(chuàng)建的數(shù)據(jù)通道而刪除另一個(gè)數(shù)據(jù)通道;如果只收到來自第二節(jié)點(diǎn)和第一中轉(zhuǎn)節(jié)點(diǎn)其中一個(gè)的數(shù)據(jù)包,則確定所收到的數(shù)據(jù)包對應(yīng)的數(shù)據(jù)通道為最終創(chuàng)建的數(shù)據(jù)通道。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,步驟B中所述確定其中一個(gè)數(shù)據(jù)包對應(yīng)的數(shù)據(jù)通道為最終創(chuàng)建的數(shù)據(jù)通道而刪除另一個(gè)數(shù)據(jù)通道的步驟為確定來自第二節(jié)點(diǎn)的數(shù)據(jù)包對應(yīng)的直連數(shù)據(jù)通道為最終創(chuàng)建的數(shù)據(jù)通道,刪除經(jīng)過第一中轉(zhuǎn)節(jié)點(diǎn)的中轉(zhuǎn)數(shù)據(jù)通道。
8.根據(jù)權(quán)利要求1、6或7所述的方法,其特征在于,步驟B進(jìn)一步包括如果沒有收到來自第二節(jié)點(diǎn)或第一中轉(zhuǎn)節(jié)點(diǎn)的數(shù)據(jù)包,則創(chuàng)建數(shù)據(jù)通道失敗。
全文摘要
本發(fā)明公開了一種創(chuàng)建點(diǎn)對點(diǎn)數(shù)據(jù)通道的方法,其特征在于,該方法包括以下步驟A.第一節(jié)點(diǎn)同時(shí)向第二節(jié)點(diǎn)和第一中轉(zhuǎn)節(jié)點(diǎn)發(fā)送數(shù)據(jù)包并將第一中轉(zhuǎn)節(jié)點(diǎn)的網(wǎng)絡(luò)信息發(fā)送給第二節(jié)點(diǎn)的超級節(jié)點(diǎn);B.第一節(jié)點(diǎn)判斷在預(yù)定時(shí)間內(nèi)是否收到第二節(jié)點(diǎn)和/或第一中轉(zhuǎn)節(jié)點(diǎn)的數(shù)據(jù)包,如果收到來自其中至少一個(gè)的數(shù)據(jù)包,則根據(jù)所收到的數(shù)據(jù)包創(chuàng)建數(shù)據(jù)通道。從上述方案中可以看出,由于在本發(fā)明中同時(shí)嘗試創(chuàng)建直連數(shù)據(jù)通道和中轉(zhuǎn)數(shù)據(jù)通道,減少了整個(gè)創(chuàng)建數(shù)據(jù)通道流程的時(shí)間,可以適用于各種實(shí)時(shí)性要求較高的場合。
文檔編號H04L12/56GK101047580SQ20061006652
公開日2007年10月3日 申請日期2006年3月28日 優(yōu)先權(quán)日2006年3月28日
發(fā)明者朱冶, 吳波, 何法江 申請人:騰訊科技(深圳)有限公司