最新的毛片基地免费,国产国语一级毛片,免费国产成人高清在线电影,中天堂国产日韩欧美,中国国产aa一级毛片,国产va欧美va在线观看,成人不卡在线

組播數(shù)據(jù)的發(fā)送方法和接收方法

文檔序號(hào):8004876閱讀:1393來源:國(guó)知局
組播數(shù)據(jù)的發(fā)送方法和接收方法
【專利摘要】本發(fā)明公開了一種組播數(shù)據(jù)的發(fā)送方法和接收方法,其中,該發(fā)送方法包括:將需要發(fā)送的組播數(shù)據(jù)拆分為多個(gè)組播包;在每個(gè)組播包的包頭添加參數(shù)信息,參數(shù)信息用于表示當(dāng)前組播包在組播數(shù)據(jù)中的位置;對(duì)添加參數(shù)信息后的組播包進(jìn)行組播發(fā)送。本發(fā)明通過拆分組播數(shù)據(jù),然后發(fā)送拆分后的組播包能提供高效的組播通信機(jī)制,并且減少數(shù)據(jù)延時(shí),此外,通過給拆分后的組播包添加具有確定每個(gè)組播包在組播數(shù)據(jù)中的位置的包頭,有利于組播包發(fā)送的完整性和有序性,進(jìn)一步提高通信效率。
【專利說明】組播數(shù)據(jù)的發(fā)送方法和接收方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,并且特別地,涉及一種組播數(shù)據(jù)的發(fā)送方法和接收方法。【背景技術(shù)】
[0002]InfiniBand架構(gòu)是一種支持多并發(fā)鏈接的“線纜轉(zhuǎn)換”技術(shù),主要用于底層的輸入/輸出通信,在串行鏈路上實(shí)現(xiàn)高速率、低延時(shí)的效果。InfiniBand架構(gòu)作為一種統(tǒng)一的互聯(lián)架構(gòu),不僅可以用于存儲(chǔ)I/O和網(wǎng)絡(luò)1/0,而且也可以用于進(jìn)程間通信。InfiniBand架構(gòu)的主要特點(diǎn)是高帶寬,單條鏈路的SDR (Single Date Rate,單數(shù)據(jù)率)帶寬為2.5Gbps,DDR (Double Date Rate,雙數(shù)據(jù)率)帶寬為 5Gbps, QDR (Quad Date Rate,四位數(shù)據(jù)率)帶寬為lOGbps,如果需要更大的帶寬,只需要增加鏈路數(shù)量即可,比如4倍的QDR帶寬可以達(dá)到40Gbps)、低時(shí)延(交換機(jī)延時(shí)140ns、應(yīng)用程序延時(shí)3 μ S、新的網(wǎng)卡技術(shù)將使應(yīng)用程序延時(shí)降低到I μ s水平)、系統(tǒng)擴(kuò)展性好(可輕松實(shí)現(xiàn)完全無擁塞的數(shù)萬端設(shè)備的InfiniBand網(wǎng)絡(luò))。另外,InfiniBand 標(biāo)準(zhǔn)支持 RDMA (Remote Direct Memory Access,遠(yuǎn)程直接存儲(chǔ)器存取),使得在使用InfiniBand構(gòu)筑服務(wù)器、存儲(chǔ)器網(wǎng)絡(luò)時(shí)比萬兆以太網(wǎng)以及FC (FibreChannel,網(wǎng)狀通道)具有更高的性能、效率和靈活性。
[0003]基于InfiniBand的多客戶端的實(shí)現(xiàn),即在服務(wù)器端接收到多個(gè)客戶端的連接請(qǐng)求后,與多個(gè)客戶端建立連接,然后服務(wù)器端依次將同一份數(shù)據(jù)發(fā)送給多個(gè)客戶端。如圖1所示,InfiniBand的組播可以基于硬件實(shí)現(xiàn),服務(wù)器節(jié)點(diǎn)(發(fā)送方)與多個(gè)客戶端建立連接后,與客戶端交護(hù)必要的信息,將接收到的數(shù)據(jù)加入QP(Queue paar,即隊(duì)列隊(duì),未在圖中示出,包括發(fā)送隊(duì)列和接收隊(duì)列)的接收隊(duì)列中,位于發(fā)送隊(duì)列中的組播數(shù)據(jù)可以經(jīng)過交換機(jī)同時(shí)有效地傳送至多個(gè)接收者(圖1中僅列如三個(gè)客戶端作為示例),然后,服務(wù)器節(jié)點(diǎn)將已發(fā)送完成的數(shù)據(jù)加入CQ(Completion queue,完成隊(duì)列)。當(dāng)交換機(jī)接收到服務(wù)器端發(fā)送的組播包后,會(huì)復(fù)制該組播包,并向加入該組播組的多個(gè)接收者發(fā)送該組播包,接收者將接收到的數(shù)據(jù)加入QP的接收隊(duì)列中,然后將接收隊(duì)列中的數(shù)據(jù)經(jīng)過發(fā)送隊(duì)列提交給用戶,已提交完成的數(shù)據(jù)加入CQ。
[0004]雖然InfiniBand具有高速率、低延時(shí)的特性,但通過分析和實(shí)際的測(cè)試可知,在對(duì)多客戶端支持的設(shè)計(jì)方案中,傳輸時(shí)的數(shù)據(jù)延時(shí)會(huì)隨著客戶端數(shù)量的增長(zhǎng)而基本上呈線性增長(zhǎng)。
[0005]針對(duì)相關(guān)技術(shù)中傳輸組播數(shù)據(jù)至多客戶端引起的數(shù)據(jù)延時(shí)的問題,目前尚未提出有效的解決方案。

【發(fā)明內(nèi)容】

[0006]針對(duì)相關(guān)技術(shù)中傳輸組播數(shù)據(jù)至多客戶端引起的數(shù)據(jù)延時(shí)的問題,本發(fā)明提出一種組播數(shù)據(jù)的發(fā)送方法和接收方法、以及服務(wù)器數(shù)據(jù)傳輸?shù)墓芾硌b置和接收端數(shù)據(jù)傳輸?shù)墓芾硌b置,能夠減少傳播組播數(shù)據(jù)時(shí)的數(shù)據(jù)延時(shí),提高通信效率。
[0007]本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:[0008]根據(jù)本發(fā)明的一個(gè)方面,提供了 一種組播數(shù)據(jù)的發(fā)送方法。
[0009]該傳送方法包括:
[0010]將需要發(fā)送的組播數(shù)據(jù)拆分為多個(gè)組播包;
[0011]在每個(gè)組播包的包頭添加參數(shù)信息,參數(shù)信息用于表示當(dāng)前組播包在組播數(shù)據(jù)中的位置;
[0012]對(duì)添加參數(shù)信息后的組播包進(jìn)行組播發(fā)送。
[0013]其中,每個(gè)組播包的參數(shù)信息包括:
[0014]第一數(shù)據(jù)頭和第二數(shù)據(jù)頭,其中,第一數(shù)據(jù)頭用于表示由組播數(shù)據(jù)拆分得到的組播包的數(shù)量,第二數(shù)據(jù)頭用于表示當(dāng)前組播包在多個(gè)組播包中的排序。
[0015]優(yōu)選地,該組播包的長(zhǎng)度小于2K。
[0016]進(jìn)一步地,對(duì)添加參數(shù)信息后的組播包進(jìn)行組播發(fā)送包括:
[0017]基于遠(yuǎn)程直接存儲(chǔ)器存取RDMA協(xié)議發(fā)送封裝后的組播包。
[0018]并且,對(duì)添加參數(shù)信息后的組播包進(jìn)行組播發(fā)送包括:
[0019]將組播包發(fā)送至交換機(jī),由交換機(jī)對(duì)組播包進(jìn)行復(fù)制并將復(fù)制的組播包發(fā)送至接收端。
[0020]根據(jù)本發(fā)明的一個(gè)方面,提供了 一種組播數(shù)據(jù)的接收方法。
[0021]該接收方法包括:
[0022]接收預(yù)先由組播數(shù)據(jù)拆分得到的多個(gè)組播包;
[0023]根據(jù)每個(gè)組播包的包頭的參數(shù)信息確定當(dāng)前組播包在組播數(shù)據(jù)中的位置;
[0024]根據(jù)每個(gè)組播包的位置將該組播包加入接收隊(duì)列。
[0025]進(jìn)一步地,每個(gè)組播包的參數(shù)信息包括:
[0026]第一數(shù)據(jù)頭和第二數(shù)據(jù)頭,其中,第一數(shù)據(jù)頭用于表示由組播數(shù)據(jù)拆分得到的組播包的數(shù)量,第二數(shù)據(jù)頭用于表示當(dāng)前組播包在多個(gè)組播包中的排序。
[0027]根據(jù)本發(fā)明的一個(gè)方面,提供了 一種服務(wù)器數(shù)據(jù)傳輸?shù)墓芾硌b置。
[0028]該服務(wù)器數(shù)據(jù)傳輸?shù)墓芾硌b置包括:
[0029]主控模塊,用于在對(duì)服務(wù)器進(jìn)行初始化的情況下,配置監(jiān)聽模塊、發(fā)送模塊、查詢發(fā)送狀態(tài)模塊;
[0030]監(jiān)聽模塊用于建立并維持與接收方的通信;
[0031]發(fā)送模塊用于將需要發(fā)送的組播數(shù)據(jù)拆分為多個(gè)組播包,并在每個(gè)組播包的包頭添加參數(shù)信息,參數(shù)信息用于表示當(dāng)前組播包在組播數(shù)據(jù)中的位置,以及對(duì)添加參數(shù)信息后的組播包進(jìn)行組播發(fā)送;
[0032]查詢發(fā)送狀態(tài)模塊用于查詢每個(gè)組播包的發(fā)送狀態(tài),并控制發(fā)送模塊對(duì)多個(gè)組播包進(jìn)行逐個(gè)發(fā)送。
[0033]其中,上述監(jiān)聽模塊用于建立并維持與接收方的通信包括:
[0034]基于遠(yuǎn)程直接存儲(chǔ)器存取RDMA協(xié)議建立并維持與接收方的通信。
[0035]進(jìn)一步地,每個(gè)組播包的參數(shù)信息包括:
[0036]第一數(shù)據(jù)頭和第二數(shù)據(jù)頭,其中,第一數(shù)據(jù)頭用于表示由組播數(shù)據(jù)拆分得到的組播包的數(shù)量,第二數(shù)據(jù)頭用于表示當(dāng)前組播包在多個(gè)組播包中的排序。
[0037]此外,發(fā)送模塊用于對(duì)添加參數(shù)信息后的組播包進(jìn)行組播發(fā)送包括:[0038]將組播包發(fā)送至交換機(jī),由交換機(jī)對(duì)組播包進(jìn)行復(fù)制并將復(fù)制的組播包發(fā)送至接收端。
[0039]根據(jù)本發(fā)明的一個(gè)方面,提供了一種接收端數(shù)據(jù)傳輸?shù)墓芾硌b置。
[0040]該接收端數(shù)據(jù)傳輸?shù)墓芾硌b置包括:
[0041]主控模塊,用于在對(duì)接收端進(jìn)行初始化的情況下,配置接收模塊、查詢模塊;
[0042]接收模塊用于接收預(yù)先由組播數(shù)據(jù)拆分得到的多個(gè)組播包,根據(jù)每個(gè)組播包的包頭的參數(shù)信息確定當(dāng)前組播包在組播數(shù)據(jù)中的位置,并根據(jù)每個(gè)組播包的位置將該組播包加入接收隊(duì)列;
[0043]查詢模塊用于在查詢到接收隊(duì)列中存在數(shù)據(jù)的情況下,提交接收隊(duì)列中的數(shù)據(jù)。
[0044]其中,每個(gè)組播包的參數(shù)信息包括:
[0045]第一數(shù)據(jù)頭和第二數(shù)據(jù)頭,其中,第一數(shù)據(jù)頭用于表示由組播數(shù)據(jù)拆分得到的組播包的數(shù)量,第二數(shù)據(jù)頭用于表示當(dāng)前組播包在多個(gè)組播包中的排序。
[0046]本發(fā)明通過拆分組播數(shù)據(jù),然后發(fā)送拆分后的組播包能提供高效的組播通信機(jī)制,并且減少數(shù)據(jù)延時(shí),此外,通過給拆分后的組播包添加具有確定每個(gè)組播包在組播數(shù)據(jù)中的位置的包頭,有利于組播包發(fā)送的完整性和有序性,進(jìn)一步提高通信效率。
【專利附圖】

【附圖說明】[0047]圖1是現(xiàn)有技術(shù)中傳輸組播數(shù)據(jù)的示意圖;[0048]圖2是根據(jù)本發(fā)明實(shí)施例的組播數(shù)據(jù)的發(fā)送方法的流程圖;[0049]圖3是根據(jù)本發(fā)明的一個(gè)實(shí)施例的發(fā)送組播數(shù)據(jù)的示意圖;[0050]圖4是根據(jù)本發(fā)明實(shí)施例的服務(wù)器數(shù)據(jù)傳輸?shù)墓芾硌b置的框圖;[0051]圖5是根據(jù)本發(fā)明的另一個(gè)實(shí)施例的服務(wù)器端運(yùn)行的示意圖;[0052]圖6是根據(jù)本發(fā)明實(shí)施例的組播數(shù)據(jù)的接收方法的流程圖;[0053]圖7是根據(jù)本發(fā)明的又一個(gè)實(shí)施例的組播數(shù)據(jù)的接收方法的流程圖;[0054]圖8是根據(jù)本發(fā)明實(shí)施例的接收端數(shù)據(jù)傳輸?shù)墓芾硌b置的框圖;[0055]圖9是為根據(jù)本發(fā)明的再一個(gè)實(shí)施例的服務(wù)器端接收步驟的流程圖;[0056]圖10是根據(jù)本發(fā)明實(shí)施例的CS模型的原理圖?!揪唧w實(shí)施方式】[0057]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完
整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0058]根據(jù)本發(fā)明的實(shí)施例,提供了 一種組播數(shù)據(jù)的發(fā)送方法。
[0059]如圖2所示,根據(jù)本發(fā)明實(shí)施例的發(fā)送方法可以包括:
[0060]步驟S201,將需要發(fā)送的組播數(shù)據(jù)拆分為多個(gè)組播包,每個(gè)組播包需要滿足長(zhǎng)度要求,優(yōu)選地,該組播包的長(zhǎng)度小于2K ;
[0061]步驟S203,在每個(gè)組播包的包頭添加參數(shù)信息,參數(shù)信息用于表示當(dāng)前組播包在組播數(shù)據(jù)中的位置。[0062]步驟S205,對(duì)添加參數(shù)信息后的組播包進(jìn)行組播發(fā)送,并且優(yōu)選地,基于遠(yuǎn)程直接存儲(chǔ)器存取RDMA協(xié)議發(fā)送封裝后的組播包,將組播包發(fā)送至交換機(jī)(可以存儲(chǔ)至交換機(jī)的緩存中),由交換機(jī)對(duì)組播包進(jìn)行復(fù)制并將復(fù)制的組播包發(fā)送至多個(gè)接收端,并且,基于需要接收組播包的客戶端的數(shù)量確定復(fù)制的份數(shù),此外,可以將多個(gè)需要接收組播數(shù)據(jù)的接收端加入一個(gè)組播組,通過設(shè)置組播組可以避免重發(fā)或是漏發(fā)現(xiàn)象。
[0063]其中,文中所述的組播包的參數(shù)信息均可以包括:第一數(shù)據(jù)頭和第二數(shù)據(jù)頭,其中,第一數(shù)據(jù)頭用于表示由組播數(shù)據(jù)拆分得到的組播包的數(shù)量,第二數(shù)據(jù)頭用于表示當(dāng)前組播包在多個(gè)組播包中的排序,并且,接收方可以根據(jù)第一數(shù)據(jù)頭判斷多個(gè)組播包是否接收完成,進(jìn)一步地,接收方可以根據(jù)第二數(shù)據(jù)頭將多個(gè)數(shù)據(jù)進(jìn)行正確排序。
[0064]如圖3所示,在實(shí)際應(yīng)用中,根據(jù)本發(fā)明實(shí)施例的組播數(shù)據(jù)的發(fā)送方法可以應(yīng)用為以下步驟:
[0065]主線程執(zhí)行初始化設(shè)置,進(jìn)行緩沖資源分配,成生發(fā)送線程、查詢線程、等待線程和刪除線程,在成功之后將數(shù)據(jù)掛在隊(duì)列,在需要結(jié)束時(shí)取消其它線程,如果不結(jié)束,則繼續(xù)將數(shù)據(jù)掛在隊(duì)列;
[0066]等待線程隨時(shí)監(jiān)聽客戶端發(fā)來的連接,然后接收,在成功地與客戶端交換數(shù)據(jù)之后,將客戶端加入全局客戶鏈表,如果交換數(shù)據(jù)失敗,則主線程執(zhí)行取消其它線程;
[0067]發(fā)送線程判斷隊(duì)列上是否有數(shù)據(jù),如果無,則休眠,如果有,則獲取組播緩存,取隊(duì)列數(shù)據(jù)拷貝到組播緩存中,再將組播緩存持在QP發(fā)送隊(duì)列;
[0068]查詢線程判斷數(shù)據(jù)是否發(fā)送成功,如果成功,則繼續(xù)查詢,如果沒有發(fā)送成功則休眠;
[0069]刪除線程判斷客戶端是否斷開連接,如果是則將該斷開連接的客戶端從全局客戶端鏈表中刪除,如果否,則刪除線程休眠。
[0070]根據(jù)本發(fā)明的實(shí)施例,提供了 一種服務(wù)器數(shù)據(jù)傳輸?shù)墓芾硌b置。
[0071]如圖4所示,根據(jù)本發(fā)明實(shí)施例的服務(wù)器數(shù)據(jù)傳輸?shù)墓芾硌b置可以包括:
[0072]主控模塊41,用于在對(duì)服務(wù)器進(jìn)行初始化的情況下,配置監(jiān)聽模塊、發(fā)送模塊、查詢發(fā)送狀態(tài)模塊;
[0073]監(jiān)聽模塊42,用于建立并維持與接收方的通信;
[0074]發(fā)送模塊43,用于將需要發(fā)送的組播數(shù)據(jù)拆分為多個(gè)組播包并在每個(gè)組播包的包頭添加參數(shù)信息,參數(shù)信息用于表示當(dāng)前組播包在組播數(shù)據(jù)中的位置,以及對(duì)添加參數(shù)信息后的組播包進(jìn)行組播發(fā)送;
[0075]查詢發(fā)送狀態(tài)模塊44,用于查詢每個(gè)組播包的發(fā)送狀態(tài),并控制發(fā)送模塊對(duì)多個(gè)組播包進(jìn)行逐個(gè)發(fā)送。
[0076]其中,監(jiān)聽模塊42用于建立并維持與接收方的通信可以包括:基于遠(yuǎn)程直接存儲(chǔ)器存取RDMA協(xié)議建立并維持與接收方的通信。
[0077]進(jìn)一步地,每個(gè)組播包的參數(shù)信息可以包括:第一數(shù)據(jù)頭和第二數(shù)據(jù)頭,其中,第一數(shù)據(jù)頭用于表示由組播數(shù)據(jù)拆分得到的組播包的數(shù)量,第二數(shù)據(jù)頭用于表示當(dāng)前組播包在多個(gè)組播包中的排序。
[0078]此外,在發(fā)送模塊43用于對(duì)添加參數(shù)信息后的組播包進(jìn)行組播發(fā)送時(shí),可以將組播包發(fā)送至交換機(jī),由交換機(jī)對(duì)組播包進(jìn)行復(fù)制并將復(fù)制的組播包發(fā)送至接收端。[0079]如圖5所示,為根據(jù)本發(fā)明的一個(gè)實(shí)施例的服務(wù)器端運(yùn)行的示意圖。為了支持一個(gè)服務(wù)器多個(gè)客戶端(即,本文中所述的接收端),服務(wù)器端需要按多線程/多進(jìn)程的方式設(shè)計(jì),其中,多線程/多進(jìn)程主要包括:主線程、監(jiān)聽線程、發(fā)送線程、查詢發(fā)送狀態(tài)線程、刪除上下文線程。以下主要描述每個(gè)線程的角色用途。
[0080]1、主線程。用戶通過主線程設(shè)定RDMA Lib的一些配置參數(shù)、創(chuàng)建監(jiān)聽線程、發(fā)送線程、查詢線程和刪除上下文線程,分配緩沖區(qū),以及做必要的退出清理工作。其中,配置參數(shù)主要包括監(jiān)聽線程的端口、IB (InfiniBand)設(shè)備名和端口號(hào)、每幀的長(zhǎng)度、幀緩沖區(qū)的數(shù)目、組播組的IP地址、本地IB卡的IP地址等等。此外,在主線程生成其它線程之后,每個(gè)線程彼此獨(dú)立運(yùn)作。
[0081]2、監(jiān)聽線程。也稱為等待連接線程。用于與隨時(shí)可能發(fā)起連接請(qǐng)求的客戶端建立初始連接,雙方交換RDMA通信的必要信息。由于在RDMA雙方通信之前,必須通過另外一種通信通道交換彼此的身份和認(rèn)證信息,否則RDMA連接將無法建立。其中,另外一種通信通道通常指socket信道,本文也采用socket信道。
[0082]3、發(fā)送線程。用于將每幀數(shù)據(jù)發(fā)送至客戶端,并寫至存儲(chǔ)加速卡(SysCache )設(shè)備。本線程的主要任務(wù)是將用戶的組播數(shù)據(jù)(可以為10MB)拆分成小包(優(yōu)選地,單個(gè)小包的長(zhǎng)度可以為2KB),并進(jìn)行封裝包頭,然后發(fā)送到交換機(jī)/路由器。由交換機(jī)/路由器進(jìn)行復(fù)制,并轉(zhuǎn)發(fā)到組播組里的各個(gè)客戶端。
[0083]其中,在監(jiān)聽線程和發(fā)送線程之間,包括異步發(fā)送數(shù)據(jù)步驟,用于將組播數(shù)據(jù)入隊(duì),然后數(shù)據(jù)出除列后進(jìn)入發(fā)送線程。
[0084]4、查詢發(fā)送狀態(tài)線程。在將每一幀數(shù)據(jù)發(fā)送交換機(jī)后,查詢發(fā)送狀態(tài)線程用于查詢數(shù)據(jù)是否發(fā)送成功,如果發(fā)送成功,則可以進(jìn)行下一幀數(shù)據(jù)的發(fā)送,否則,需要等待該數(shù)據(jù)幀發(fā)送成功。采用并行的兩個(gè)線程執(zhí)行,即,將查詢發(fā)送狀態(tài)線程和發(fā)送線程的分離,可以提高數(shù)據(jù)發(fā)送的速率。
[0085]5、刪除上下文線程。在服務(wù)器端,通過鏈表來維護(hù)客戶端與服務(wù)器進(jìn)行RDMA通信的必要信息(也可以稱為上下文信息),用于RDMA Write操作定時(shí)發(fā)送心跳。在客戶端斷開后,服務(wù)器向客戶端發(fā)送的心跳得不到回應(yīng),則服務(wù)器可以認(rèn)定該客戶端已斷開通信連接,因此,服務(wù)器會(huì)將這些信息從鏈表中刪除,并釋放本地的資源。由于在操作鏈表之前需要獲取鎖,而釋放本地資源比較耗時(shí),因此,在實(shí)際操作中,服務(wù)器端還維護(hù)了一個(gè)移除鏈表,用于將鏈接斷開客戶端(也可稱為死掉客戶端)的上下文信息從激活鏈表中刪除,放入移除鏈表中。刪除上下文線程主要是負(fù)責(zé)定時(shí)檢測(cè)移除鏈表中是否有元素,如果有,則刪除移除鏈表中的元素,釋放斷開客戶端對(duì)應(yīng)的本地IB資源,否則,睡眠后繼續(xù)檢測(cè)。
[0086]根據(jù)本發(fā)明的實(shí)施例,提供了 一種組播數(shù)據(jù)的接收方法。
[0087]如圖6所示,根據(jù)本發(fā)明實(shí)施例的接收方法可以包括:
[0088]步驟S601,接收預(yù)先由組播數(shù)據(jù)拆分得到的多個(gè)組播包;
[0089]步驟S603,根據(jù)每個(gè)組播包的包頭的參數(shù)信息確定當(dāng)前組播包在組播數(shù)據(jù)中的位置,進(jìn)一步地,每個(gè)組播包的參數(shù)信息可以包括:第一數(shù)據(jù)頭和第二數(shù)據(jù)頭,其中,第一數(shù)據(jù)頭用于表示由組播數(shù)據(jù)拆分得到的組播包的數(shù)量,第二數(shù)據(jù)頭用于表示當(dāng)前組播包在多個(gè)組播包中的排序;
[0090]步驟S605,根據(jù)每個(gè)組播包的位置將該組播包加入接收隊(duì)列,并且,需要將第一數(shù)據(jù)頭和第二數(shù)據(jù)頭從每個(gè)組播包中剝離出來之后,根據(jù)組播包在多個(gè)組播包中的位置封裝剝離后的多個(gè)組播包。
[0091]在實(shí)際應(yīng)用中,根據(jù)本發(fā)明實(shí)施例的組播數(shù)據(jù)的發(fā)送和接收方法可以采用CS(Client-Server)模型來支持單服務(wù)器與多客戶端的通信來實(shí)現(xiàn),并且,可以在服務(wù)器和客戶端采用不同的開發(fā)平臺(tái),例如,服務(wù)器端使用Linux操作系統(tǒng),而客戶端可以采用Windows系統(tǒng),也可以使用計(jì)算機(jī)領(lǐng)域公知的一些其它操作系統(tǒng)。
[0092]如圖7所示,在實(shí)際應(yīng)用中,根據(jù)本發(fā)明實(shí)施例的組播數(shù)據(jù)的接收方法可以應(yīng)用為以下步驟:
[0093]主線程與服務(wù)器端進(jìn)行socket通信從而進(jìn)行必要的信息交互,然后進(jìn)行初始化設(shè)置、緩沖資源分配、生成查詢線程和、從隊(duì)列中獲取數(shù)據(jù),詢問獲取數(shù)據(jù)是否結(jié)束,如果結(jié)束則關(guān)閉其它線程,如果未結(jié)束則繼續(xù)從隊(duì)列中獲取數(shù)據(jù)。
[0094]接收線程詢問本地是否有空緩存,如果否則將緩存掛到QP接收隊(duì)列,如果有則休眠1ms,然后繼續(xù)詢問本地是否有空緩存。
[0095]生成查詢線程獲取用戶緩存,在判斷是否收到數(shù)據(jù),如果未接收到數(shù)據(jù),則休眠Ims,然后繼續(xù)判斷是否完成一幀數(shù)據(jù)重組,如果接收到數(shù)據(jù),則復(fù)制用戶緩存,判斷是否完成一幀數(shù)據(jù)重組,如果未完成一幀數(shù)據(jù)重組,由繼續(xù)接收數(shù)據(jù),如果完成一幀數(shù)據(jù)重組,則將數(shù)據(jù)掛入隊(duì)列。
[0096]根據(jù)本發(fā)明的實(shí)施例,提供了 一種接收端數(shù)據(jù)傳輸?shù)墓芾硌b置。
[0097]如圖8所示,根據(jù)本發(fā)明實(shí)施例的管理裝置可以包括:
[0098]主控模塊81,用于在對(duì)接收端進(jìn)行初始化的情況下,配置接收模塊、查詢模塊;
[0099]接收模塊82,用于接收預(yù)先由組播數(shù)據(jù)拆分得到的多個(gè)組播包,根據(jù)每個(gè)組播包的包頭的參數(shù)信息確定當(dāng)前組播包在組播數(shù)據(jù)中的位置,并根據(jù)每個(gè)組播包的位置將該組播包加入接收隊(duì)列;
[0100]查詢模塊83,用于在查詢到接收隊(duì)列中存在數(shù)據(jù)的情況下,提交接收隊(duì)列中的數(shù)據(jù)。
[0101]其中,每個(gè)組播包的參數(shù)信息可以包括:
[0102]第一數(shù)據(jù)頭和第二數(shù)據(jù)頭,其中,第一數(shù)據(jù)頭用于表示由組播數(shù)據(jù)拆分得到的組播包的數(shù)量,第二數(shù)據(jù)頭用于表示當(dāng)前組播包在多個(gè)組播包中的排序。
[0103]客戶端程序總體框架如圖5所示。為了達(dá)到低延時(shí)的性能要求,客戶端也采用了多線程的設(shè)計(jì)。
[0104]如圖9所示,為根據(jù)本發(fā)明的一個(gè)實(shí)施例的服務(wù)器端接收步驟的示意圖。為了達(dá)到低延時(shí)的性能要求,客戶端也采用了多線程的設(shè)計(jì)。線程的角色描述如下:
[0105]1、主線程。通過 socket 與服務(wù)器端建立 TCP (Transmission Control Protocol傳輸控制協(xié)議)連接并與服務(wù)器進(jìn)行必要的數(shù)據(jù)通信,獲取服務(wù)器發(fā)送的組播數(shù)據(jù)包的控制信息和組播組信息,然后分配本地的IB資源及緩沖區(qū)。最后創(chuàng)建接收線程和查詢線程,以及做必要的退出清理工作。
[0106]2、接收線程。接收來自服務(wù)器的組播數(shù)據(jù)包,獲取包頭中關(guān)于數(shù)據(jù)位置信息后,將包頭剔除掉后拷貝到預(yù)先分配好的數(shù)據(jù)接收緩存中。如果該緩存被填充滿,則加入接收隊(duì)列中,等待下一步操作。[0107]其中,建立連接后,在存接收線程之后,存在異步獲取數(shù)據(jù)步驟,接收線程將數(shù)據(jù)除隊(duì)之后,用于將組播數(shù)據(jù)進(jìn)行異步接收,從而取出隊(duì)列,同時(shí)進(jìn)行超時(shí)處理。
[0108]3、查詢線程。該線程會(huì)被周期性的喚醒,來檢查接收隊(duì)列上是否有數(shù)據(jù),如果有數(shù)據(jù),則將數(shù)據(jù)提交給用戶;否則,繼續(xù)會(huì)進(jìn)入睡眠狀態(tài),等待下一次被喚醒。
[0109]如圖10所示,為根據(jù)本發(fā)明實(shí)施例的CS模型的原理圖,其中,CS模型分為服務(wù)器端、交換機(jī)端和客服端。
[0110]服務(wù)器端的操作包括:將等待發(fā)送的數(shù)據(jù)(即文中所說的組播數(shù)據(jù))進(jìn)行數(shù)據(jù)包的拆分,可以根據(jù)組播包的大小要求將組播包分為O號(hào)包至N號(hào)包,拆分后的小包(即文中所說的組播包,)能夠滿足組播包的大小要求,例如,在一個(gè)實(shí)施例中,組播包的長(zhǎng)度可以小于2K ;此外,并根據(jù)組播包的總數(shù)計(jì)算出一個(gè)組播包數(shù)量的總值,并將該總值序列化作為第一數(shù)據(jù)頭,接收方可以根據(jù)總值判斷一個(gè)組播數(shù)據(jù)所包含的組播包是否完全接收完成,利用總值進(jìn)行丟包檢測(cè),可以防止漏發(fā)組播包;然后對(duì)拆分后的多個(gè)組播包再進(jìn)行計(jì)算并序列化得出第二數(shù)據(jù)頭,該第二數(shù)據(jù)頭能表示每個(gè)組播包在多個(gè)組播包中的位置,第二數(shù)據(jù)頭的設(shè)置主要目的是為了方便客戶端在收到組播包后可以根據(jù)該序列號(hào)進(jìn)行數(shù)據(jù)的重組;最后將兩個(gè)數(shù)據(jù)頭與拆分好的對(duì)應(yīng)的組播包進(jìn)行合并后通過RDMA協(xié)議寫入交換機(jī)的緩存中。圖4中由總值序列化得到的數(shù)據(jù)頭為第一數(shù)據(jù)頭,由序列號(hào)序列化得到的數(shù)據(jù)頭為第 數(shù)據(jù)頭。
[0111]交換機(jī)的操作包括:將收到的數(shù)據(jù)包進(jìn)行復(fù)制,然后通過InfiniBand發(fā)送至組播組的各個(gè)客戶端的緩存中,預(yù)先建立組播組,將需要相同組播數(shù)據(jù)的多個(gè)客戶加入一個(gè)組播組。
[0112]客戶端的操作包括:在收到組播包后,通過剝離數(shù)據(jù)包頭(即兩個(gè)數(shù)據(jù)頭),通過兩個(gè)數(shù)據(jù)頭確定組播包在接收多個(gè)組播包中的位置后,將由一個(gè)組播數(shù)據(jù)拆分得到的多個(gè)組播包組合后返回給客戶端。
[0113]進(jìn)一步地,可以根據(jù)本發(fā)明實(shí)施例,將數(shù)據(jù)傳輸分為服務(wù)器和客戶端兩部分,服務(wù)器負(fù)責(zé)將數(shù)據(jù)發(fā)往已注冊(cè)并加入組播組的所有客戶端;客戶端負(fù)責(zé)接收這些數(shù)據(jù)。
[0114]綜上所述,借助于本發(fā)明的上述技術(shù)方案,本發(fā)明通過拆分組播數(shù)據(jù),然后發(fā)送拆分后的組播包能提供高效的組播通信機(jī)制,并且減少數(shù)據(jù)延時(shí),此外,通過給拆分后的組播包添加具有確定每個(gè)組播包在組播數(shù)據(jù)中的位置的包頭,有利于組播包發(fā)送的完整性和有序性,進(jìn)一步提高通信效率。此外,本發(fā)明中則采用InfiniBand的組播技術(shù)提供了一種高效的單服務(wù)器、多客戶端的通信機(jī)制,幾乎可以將數(shù)據(jù)同時(shí)高速的發(fā)送到多客戶端,而且延時(shí)不會(huì)隨客戶端的增長(zhǎng)而線性遞增。
[0115]以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種組播數(shù)據(jù)的發(fā)送方法,其特征在于,包括: 將需要發(fā)送的所述組播數(shù)據(jù)拆分為多個(gè)組播包; 在每個(gè)組播包的包頭添加參數(shù)信息,所述參數(shù)信息用于表示當(dāng)前組播包在所述組播數(shù)據(jù)中的位置; 對(duì)添加參數(shù)信息后的組播包進(jìn)行組播發(fā)送。
2.根據(jù)權(quán)利要求1所述的發(fā)送方法,其特征在于,每個(gè)組播包的參數(shù)信息包括: 第一數(shù)據(jù)頭和第二數(shù)據(jù)頭,其中,所述第一數(shù)據(jù)頭用于表示由所述組播數(shù)據(jù)拆分得到的組播包的數(shù)量,所述第二數(shù)據(jù)頭用于表示當(dāng)前組播包在所述多個(gè)組播包中的排序。
3.根據(jù)權(quán)利要求1所述的發(fā)送方法,其特征在于,所述組播包的長(zhǎng)度小于2K。
4.根據(jù)權(quán)利要求1所述的發(fā)送方法,其特征在于,對(duì)添加參數(shù)信息后的組播包進(jìn)行組播發(fā)送包括: 基于遠(yuǎn)程直接存儲(chǔ)器存取RDMA協(xié)議發(fā)送封裝后的組播包。
5.根據(jù)權(quán)利要求1所述的發(fā)送方法,其特征在于,對(duì)添加參數(shù)信息后的組播包進(jìn)行組播發(fā)送包括: 將組播包發(fā)送至交換機(jī),由所述交換機(jī)對(duì)組播包進(jìn)行復(fù)制并將復(fù)制的組播包發(fā)送至接收端。
6.—種組播數(shù)據(jù)的接收方法,其特征在于,包括: 接收預(yù)先由所述組播 數(shù)據(jù)拆分得到的多個(gè)組播包; 根據(jù)每個(gè)組播包的包頭的參數(shù)信息確定當(dāng)前組播包在所述組播數(shù)據(jù)中的位置; 根據(jù)每個(gè)組播包的位置將該組播包加入接收隊(duì)列。
7.根據(jù)權(quán)利要求6所述的發(fā)送方法,其特征在于,每個(gè)組播包的參數(shù)信息包括: 第一數(shù)據(jù)頭和第二數(shù)據(jù)頭,其中,所述第一數(shù)據(jù)頭用于表示由所述組播數(shù)據(jù)拆分得到的組播包的數(shù)量,所述第二數(shù)據(jù)頭用于表示當(dāng)前組播包在所述多個(gè)組播包中的排序。
8.一種服務(wù)器數(shù)據(jù)傳輸?shù)墓芾硌b置,其特征在于,包括: 主控模塊,用于在對(duì)服務(wù)器進(jìn)行初始化的情況下,配置監(jiān)聽模塊、發(fā)送模塊、查詢發(fā)送狀態(tài)模塊; 所述監(jiān)聽模塊用于建立并維持與接收方的通信; 所述發(fā)送模塊用于將需要發(fā)送的所述組播數(shù)據(jù)拆分為多個(gè)組播包,并在每個(gè)組播包的包頭添加參數(shù)信息,所述參數(shù)信息用于表示當(dāng)前組播包在所述組播數(shù)據(jù)中的位置,以及對(duì)添加參數(shù)信息后的組播包進(jìn)行組播發(fā)送; 所述查詢發(fā)送狀態(tài)模塊用于查詢每個(gè)組播包的發(fā)送狀態(tài),并控制所述發(fā)送模塊對(duì)所述多個(gè)組播包進(jìn)行逐個(gè)發(fā)送。
9.根據(jù)權(quán)利要求8所述的管理裝置,其特征在于,所述監(jiān)聽模塊用于建立并維持與接收方的通信包括: 基于遠(yuǎn)程直接存儲(chǔ)器存取RDMA協(xié)議建立并維持與接收方的通信。
10.根據(jù)權(quán)利要求8所述的管理裝置,其特征在于,每個(gè)組播包的參數(shù)信息包括: 第一數(shù)據(jù)頭和第二數(shù)據(jù)頭,其中,所述第一數(shù)據(jù)頭用于表示由所述組播數(shù)據(jù)拆分得到的組播包的數(shù)量,所述第二數(shù)據(jù)頭用于表示當(dāng)前組播包在所述多個(gè)組播包中的排序。
11.根據(jù)權(quán)利要求8所述的管理裝置,其特征在于,所述發(fā)送模塊用于對(duì)添加參數(shù)信息后的組播包進(jìn)行組播發(fā)送包括: 將組播包發(fā)送至交換機(jī),由所述交換機(jī)對(duì)組播包進(jìn)行復(fù)制并將復(fù)制的組播包發(fā)送至接收端。
12.一種接收端數(shù)據(jù)傳輸?shù)墓芾硌b置,其特征在于,包括: 主控模塊,用于在對(duì)接收端進(jìn)行初始化的情況下,配置接收模塊、查詢模塊; 所述接收模塊用于接收預(yù)先由所述組播數(shù)據(jù)拆分得到的多個(gè)組播包,根據(jù)每個(gè)組播包的包頭的參數(shù)信息確定當(dāng)前組播包在所述組播數(shù)據(jù)中的位置,并根據(jù)每個(gè)組播包的位置將該組播包加入接收隊(duì)列; 所述查詢模塊用于在查詢到所述接收隊(duì)列中存在數(shù)據(jù)的情況下,提交所述接收隊(duì)列中的數(shù)據(jù)。
13.根據(jù)權(quán)利要求12所述的管理裝置,其特征在于,每個(gè)組播包的參數(shù)信息包括: 第一數(shù)據(jù)頭和第二數(shù)據(jù)頭,其中,所述第一數(shù)據(jù)頭用于表示由所述組播數(shù)據(jù)拆分得到的組播包的數(shù)量,所述第二數(shù) 據(jù)頭用于表示當(dāng)前組播包在所述多個(gè)組播包中的排序。
【文檔編號(hào)】H04L12/953GK103441937SQ201310366935
【公開日】2013年12月11日 申請(qǐng)日期:2013年8月21日 優(yōu)先權(quán)日:2013年8月21日
【發(fā)明者】張建斌, 袁清波, 苗艷超, 劉新春, 邵宗有 申請(qǐng)人:曙光信息產(chǎn)業(yè)(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1