丟包等原因未能成功發(fā)送時,能夠較為及時快速地重新傳輸,在實現(xiàn)快速的數(shù)據(jù)收發(fā)的同時,較好地保證的數(shù)據(jù)的完整性。
[0045]再請參見圖2,是本發(fā)明實施例的另一種數(shù)據(jù)傳輸方法的流程示意圖,本發(fā)明實施例的所述方法可應(yīng)用在服務(wù)器、終端等用于進行數(shù)據(jù)收發(fā)的設(shè)備中,具體的,所述方法包括:
[0046]S201:在檢測到數(shù)據(jù)傳輸時,向接收節(jié)點發(fā)送攜帶任務(wù)信息的查詢請求。
[0047]在檢測到數(shù)據(jù)下載請求或者數(shù)據(jù)傳輸調(diào)度指令,需要向目標的接收節(jié)點傳輸數(shù)據(jù)時,生成所述查詢請求發(fā)送給所述接收節(jié)點,所述查詢請求用于請求獲取所述接收節(jié)點已接收到的本次數(shù)據(jù)傳輸任務(wù)的數(shù)據(jù)分片。
[0048]所述攜帶的任務(wù)信息可以僅為本次檢測到的數(shù)據(jù)傳輸任務(wù)的任務(wù)標識,例如在檢測到某個關(guān)于視頻數(shù)據(jù)傳輸?shù)娜蝿?wù)中,針對該視頻數(shù)據(jù)傳輸?shù)牟樵冋埱髣t可以包括該視頻的主題名稱等標識息。
[0049]同樣,在本發(fā)明實施例中,原始的完整數(shù)據(jù)的發(fā)送可以是以指定數(shù)據(jù)量大小的數(shù)據(jù)分片(例如IM的數(shù)據(jù)塊)為單位進行數(shù)據(jù)傳輸,在這些數(shù)據(jù)分片中攜帶有標識符等信息,以便于后續(xù)能夠基于該標識符以及片偏移等來對各個數(shù)據(jù)分片進行重組,得到對應(yīng)的完整數(shù)據(jù)。
[0050]S202:接收所述接收節(jié)點響應(yīng)所述查詢請求返回的數(shù)據(jù)信息,所述數(shù)據(jù)信息用于表示所述接收節(jié)點已接收到的所述任務(wù)信息對應(yīng)數(shù)據(jù)的數(shù)據(jù)分片標識。
[0051]具體的,當所述接收節(jié)點沒有接收到關(guān)于所述查詢請求中任務(wù)信息對應(yīng)數(shù)據(jù)時,則返回數(shù)據(jù)分片標識為blockO,即所述S202得到分片標識為blockO的數(shù)據(jù)信息;若已接收到部分數(shù)據(jù),則返回對應(yīng)的分片標識,例如,如果接收到第100個數(shù)據(jù)分片,則返回的數(shù)據(jù)分片標識可以為blocklOl,以指示發(fā)送節(jié)點從101個分片開始發(fā)送數(shù)據(jù),即所述S202得到分片標識為blocklOl的數(shù)據(jù)信息。
[0052]S203:若所述數(shù)據(jù)信息表示的數(shù)據(jù)分片標識為初始標識,將所述任務(wù)信息對應(yīng)數(shù)據(jù)目錄中的數(shù)據(jù)發(fā)送給所述接收節(jié)點;
[0053]即:若返回的數(shù)據(jù)信息為blockO,則獲取所述任務(wù)信息對應(yīng)的全部數(shù)據(jù),并按照數(shù)據(jù)分片依次向接收節(jié)點發(fā)送數(shù)據(jù)。
[0054]S204:若所述數(shù)據(jù)信息表示的數(shù)據(jù)分片標識為位置標識,從所述任務(wù)信息對應(yīng)數(shù)據(jù)目錄中獲取所述位置標識所對應(yīng)位置的數(shù)據(jù)分片發(fā)送給所述接收節(jié)點。
[0055]即:若返回的數(shù)據(jù)信息為blocklOl等用于表示從101的數(shù)據(jù)分片位置開始發(fā)送的位置標識,則對應(yīng)的從所述任務(wù)信息對應(yīng)的第101個數(shù)據(jù)分片依次向接收節(jié)點發(fā)送數(shù)據(jù)。
[0056]具體的,所述S201至S204與上述圖1描述的實施例中的SlOl對應(yīng)。
[0057]S205:接收所述接收節(jié)點響應(yīng)所述進度查詢請求返回的作為接收進度信息的接收位圖;
[0058]在本發(fā)明實施例中,接收進度信息為一接收位圖bitmap,所述接收位圖中的每一個點用于表示一個數(shù)據(jù)分片的接收狀態(tài);其中,接收位圖中被賦值為有效的點表示該點對應(yīng)的數(shù)據(jù)分片已被接收,接收位圖中被賦值為無效的點表示該點對應(yīng)的數(shù)據(jù)分片未被接收。
[0059]具體可參見圖3,是發(fā)送節(jié)點向接收節(jié)點發(fā)送數(shù)據(jù)的其中一種示意圖,其中,在發(fā)送節(jié)點中生成本地發(fā)送位圖,所述本地發(fā)送位圖中的每一個點用于表示一個數(shù)據(jù)分片的發(fā)送狀態(tài);所述本地發(fā)送位圖中被賦值為有效的點表示該點對應(yīng)的數(shù)據(jù)分片已被本節(jié)點發(fā)送,所述本地發(fā)送位圖中被賦值為無效的點表示該點對應(yīng)的數(shù)據(jù)分片未被本節(jié)點發(fā)送。在接收節(jié)點中維護接收位圖。
[0060]在所述S205中可以獲取到圖3中接收節(jié)點中維護的接收位圖,以便確定已發(fā)送的數(shù)據(jù)分片和未發(fā)送的數(shù)據(jù)分片。在發(fā)送位圖或者接收位圖中,有效的點即賦值為“I”的點被標記為黑色,而無效的點即賦值為“O”的點標記為白色。
[0061]S206:根據(jù)已發(fā)送數(shù)據(jù)的數(shù)據(jù)分片標識范圍和所述接收位圖中賦值為無效的點,確定發(fā)送節(jié)點已發(fā)送而未被接收節(jié)點接收的數(shù)據(jù)分片標識;
[0062]發(fā)送節(jié)點根據(jù)已發(fā)送數(shù)據(jù)的數(shù)據(jù)分片標識范圍(對應(yīng)于預(yù)設(shè)的數(shù)據(jù)量閾值),并根據(jù)接收位圖中無效的點(被賦值為O的點或者顏色為黑色的點),可以確定出發(fā)送節(jié)點已發(fā)送而未被接收節(jié)點接收的數(shù)據(jù)分片標識,例如,在圖3中已發(fā)送的數(shù)據(jù)分片標識范圍為blockl至block34,則而在接收位圖中,block2、blockl4以及block29為已發(fā)送而未被接收的點,由此可以確定出這些點對應(yīng)的數(shù)據(jù)分片已發(fā)生丟包,需要重新發(fā)送以保證數(shù)據(jù)的完整,即執(zhí)行下述的S207。
[0063]若根據(jù)接收位圖確定不存在已發(fā)送而未被接收節(jié)點接收的數(shù)據(jù)分片,則繼續(xù)發(fā)送還未發(fā)送的數(shù)據(jù)對應(yīng)的數(shù)據(jù)分片,即直接執(zhí)行下述的S209。
[0064]S207:將確定出的數(shù)據(jù)分片標識對應(yīng)的數(shù)據(jù)分片發(fā)送給所述接收節(jié)點。
[0065]S208:檢測所述確定出的數(shù)據(jù)分片標識對應(yīng)的數(shù)據(jù)分片是否均成功發(fā)送給所述接收節(jié)點。
[0066]具體可以再次通過請求接收位圖的方式來確定所述S206中確定的已發(fā)送而未被接收節(jié)點接收的數(shù)據(jù)分片是否均成功發(fā)送,或者在重復(fù)發(fā)送一次或兩次所述S206中確定的已發(fā)送而未被接收節(jié)點接收的數(shù)據(jù)分片后,即認為接收節(jié)點已成功接收相應(yīng)數(shù)據(jù)分片。
[0067]S209:若是,則根據(jù)已發(fā)送數(shù)據(jù)的數(shù)據(jù)分片標識范圍,獲取未發(fā)送的數(shù)據(jù)發(fā)送給所述接收節(jié)點。
[0068]所述S205至S209與上述圖1描述的實施例中的S103對應(yīng)。
[0069]本發(fā)明實施例在傳輸數(shù)據(jù)的過程中,能夠在已發(fā)送數(shù)據(jù)達到一定值時,確定接收端的接收情況,以在某些數(shù)據(jù)因為網(wǎng)絡(luò)丟包等原因未能成功發(fā)送時,能夠較為及時快速地重新傳輸,在實現(xiàn)快速的數(shù)據(jù)收發(fā)的同時,較好地保證的數(shù)據(jù)的完整性。并且能夠基于接收端返回的數(shù)據(jù)信息確定接收端已接收到的數(shù)據(jù)位置,從而快速、準確地實現(xiàn)斷點續(xù)傳。在節(jié)點中維護發(fā)送位圖以及接收位圖,也可以直觀地記錄任務(wù)數(shù)據(jù)的發(fā)送以及接收量。
[0070]進一步的,上述圖1至圖3對應(yīng)的實施例中描述了作為發(fā)送方發(fā)送數(shù)據(jù)的流程,在本發(fā)明實施例中,上述的發(fā)送節(jié)點在作為發(fā)送方通過上述圖1至圖3的流程發(fā)送數(shù)據(jù)的同時,還作為接收節(jié)點接收上游發(fā)送節(jié)點發(fā)送的數(shù)據(jù),具體的,再請參見圖4,是本發(fā)明實施例的再一種數(shù)據(jù)傳輸方法的流程示意圖,本發(fā)明實施例的所述方法可應(yīng)用在服務(wù)器、終端等用于進行數(shù)據(jù)收發(fā)的設(shè)備中,具體的,所述方法包括:
[0071]S301:接收數(shù)據(jù),并根據(jù)已接收到的數(shù)據(jù)生成本地接收位圖;
[0072]同樣,所述本地接收位圖中被賦值為有效的點表示該點對應(yīng)的數(shù)據(jù)分片已被本節(jié)點接收,所述本地接收位圖中被賦值為無效的點表示該點對應(yīng)的數(shù)據(jù)分片未被本節(jié)點接收。具體可以參見圖5,是本發(fā)明實施例的一種包括數(shù)據(jù)接收和數(shù)據(jù)發(fā)送的示意圖。在peerl中,即包括本地接收位圖,也包括本地發(fā)送位圖。
[0073]S302:將已接收到的數(shù)據(jù)作為任務(wù)數(shù)據(jù);具體包括:根據(jù)本地接收位圖確定已被接收的數(shù)據(jù)分片,將已被接收的數(shù)據(jù)分片作為任務(wù)數(shù)據(jù)。
[0074]即在發(fā)送數(shù)據(jù)分片時,根據(jù)本地接收位圖確定對應(yīng)的數(shù)據(jù)分片是否被接收,僅當所述本地接收位圖中相應(yīng)點被賦值為“I”(有效)時,才確定該數(shù)據(jù)分片被完整接收,然后向下游接收端(圖5中的peerf)發(fā)送該點對應(yīng)的數(shù)據(jù)分片,即將該點對應(yīng)的數(shù)據(jù)分片作為任務(wù)數(shù)據(jù)執(zhí)行下述的S303至S305。
[0075]S303:發(fā)送節(jié)點向接收節(jié)點發(fā)送任務(wù)數(shù)據(jù),并檢測已發(fā)送數(shù)據(jù)的數(shù)據(jù)量;
[0076]S304:若已發(fā)送數(shù)據(jù)的數(shù)據(jù)量達到預(yù)設(shè)的數(shù)據(jù)量閾值,則向所述接收節(jié)點發(fā)送進度查詢請求;
[0077]S305:根據(jù)所述接收節(jié)點響應(yīng)所述進度查詢請求返回的接收進度信息,確定未傳輸?shù)臄?shù)據(jù)分片,并向所述接收節(jié)點發(fā)送未傳輸?shù)臄?shù)據(jù)分片;其中,所述接收進度信息包括所述接收節(jié)點已接收到的數(shù)據(jù)的數(shù)據(jù)分片標識。
[0078]所述S303至S305的具體實現(xiàn)可以參見上述圖1對應(yīng)的實施例中的SlOl至S103,或者上述圖2對應(yīng)實施例中的S201至S209。
[0079]在本發(fā)明實施例中,所述的發(fā)送節(jié)點在圖2對應(yīng)的實施例中可以完成向接收節(jié)點(即下游節(jié)點)的數(shù)據(jù)發(fā)送,同時也可接