本申請涉及計算機技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)推送方法及裝置。
背景技術(shù):
目前,互聯(lián)網(wǎng)在日常生活中已經(jīng)大大普及,用戶可以通過使用終端上各種應(yīng)用的客戶端,與相應(yīng)的服務(wù)端進行業(yè)務(wù)交互,以獲得服務(wù)商提供的業(yè)務(wù)服務(wù)。其中,所述終端可以是個人計算機、手機、平板電腦、智能手表、車載移動臺等終端,所述業(yè)務(wù)可以是即時通訊業(yè)務(wù)、網(wǎng)購業(yè)務(wù)、網(wǎng)上金融業(yè)務(wù)、在線視頻業(yè)務(wù)等網(wǎng)上業(yè)務(wù)。
在現(xiàn)有技術(shù)中,在交互過程中,終端上應(yīng)用的客戶端一般基于超文本傳輸協(xié)議(Hyper Text Transfer Protocol,HTTP)協(xié)議,向服務(wù)端發(fā)送數(shù)據(jù)請求,服務(wù)端則響應(yīng)該數(shù)據(jù)請求,將相應(yīng)的業(yè)務(wù)數(shù)據(jù)發(fā)送給客戶端。
但是,在某些應(yīng)用場景下,如客戶端與服務(wù)端之間的通信質(zhì)量較差時,或者,客戶端的進程異常時,上述的業(yè)務(wù)數(shù)據(jù)在從服務(wù)端至客戶端的傳輸過程中可能會丟失一部分,從而導(dǎo)致客戶端獲取到的業(yè)務(wù)數(shù)據(jù)不全,而服務(wù)端也并不知曉。因此,在上述情況下,客戶端獲取到的業(yè)務(wù)數(shù)據(jù)的可靠性較低。
技術(shù)實現(xiàn)要素:
本申請實施例提供一種數(shù)據(jù)推送方法,用以解決現(xiàn)有技術(shù)中在某些應(yīng)用場景下,客戶端從服務(wù)端獲取到的業(yè)務(wù)數(shù)據(jù)的可靠性較低的問題。
本申請實施例提供一種數(shù)據(jù)推送裝置,用以解決現(xiàn)有技術(shù)中在某些應(yīng)用場景下,客戶端從服務(wù)端獲取到的業(yè)務(wù)數(shù)據(jù)的可靠性較低的問題。
本申請實施例提供的一種數(shù)據(jù)推送方法,包括:
服務(wù)端獲取客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息;
所述服務(wù)端根據(jù)所述同步信息,通過與所述客戶端之間建立的長連接,向所述客戶端推送所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)。
本申請實施例提供的一種數(shù)據(jù)推送方法,包括:
客戶端針對自身上的業(yè)務(wù)數(shù)據(jù),生成所述業(yè)務(wù)數(shù)據(jù)的同步信息;
所述客戶端將所述同步信息上報給服務(wù)端,以便于所述服務(wù)端根據(jù)所述同步信息,向所述客戶端推送所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)。
本申請實施例提供的一種數(shù)據(jù)推送裝置,包括:
獲取模塊,用于獲取客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息;
推送模塊,用于根據(jù)所述同步信息,通過與所述客戶端之間建立的長連接,向所述客戶端推送所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)。
本申請實施例提供的一種數(shù)據(jù)推送裝置,包括:
生成模塊,用于針對客戶端上的業(yè)務(wù)數(shù)據(jù),生成所述業(yè)務(wù)數(shù)據(jù)的同步信息;
上報模塊,用于將所述同步信息上報給服務(wù)端,以便于所述服務(wù)端根據(jù)所述同步信息,向所述客戶端推送所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)。
本申請實施例通過上述至少一種技術(shù)方案,由于服務(wù)端根據(jù)所述同步信息,可以確定客戶端上的已經(jīng)有的業(yè)務(wù)數(shù)據(jù),以及尚未同步過去的業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù),且服務(wù)端與客戶端之間維持有長連接,因此,服務(wù)端可以有序地將尚未同步過去的增量數(shù)據(jù)推送給客戶端,且即使增量數(shù)據(jù)在傳輸過程中丟失,服務(wù)端后續(xù)也可以通過所述同步信息知曉,進而向客戶端重傳丟失的增量數(shù)據(jù),從而,提高了客戶端從服務(wù)端獲取到的業(yè)務(wù)數(shù)據(jù)的可靠性。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:
圖1為本申請實施例提供的數(shù)據(jù)推送過程;
圖2示出了,在一種實際應(yīng)用場景下,本申請實施例提供的數(shù)據(jù)推送詳細過程;
圖3示出了,在另一種實際應(yīng)用場景下,本申請實施例提供的數(shù)據(jù)推送詳細過程;
圖4為本申請實施例提供的對應(yīng)于圖1的數(shù)據(jù)推送過程;
圖5為本申請實施例提供的數(shù)據(jù)推送裝置結(jié)構(gòu)示意圖;
圖6為本申請實施例提供的另一種數(shù)據(jù)推送裝置結(jié)構(gòu)示意圖。
具體實施方式
為使本申請的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本申請具體實施例及相應(yīng)的附圖對本申請技術(shù)方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
圖1為本申請實施例提供的數(shù)據(jù)推送過程,具體包括以下步驟:
S101:服務(wù)端獲取客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息。
本申請實施例提供的信息驗證的方法的執(zhí)行主體可以是:終端或服務(wù)器上的應(yīng)用的服務(wù)端。其中,所述服務(wù)端可以是客戶端/服務(wù)端(Client/Server,C/S)結(jié)構(gòu)中的服務(wù)端,也可以是瀏覽器/服務(wù)端(Brower/Server,B/S)結(jié)構(gòu)中的服務(wù)端,相應(yīng)的,所述客戶端可以是C/S結(jié)構(gòu)中的客戶端,也可以是B/S結(jié)構(gòu)中的瀏覽器;所述終端包括但不限于:個人計算機、手機、平板電腦、智能手表、車載移動臺等;所述服務(wù)器包括但不限于:個人計算機、大中型計算機、計算機集群等。
在本申請實施例中,所述的業(yè)務(wù)數(shù)據(jù)可以是任一確定的業(yè)務(wù)場景下的業(yè)務(wù)數(shù)據(jù),例如,對于即時通訊應(yīng)用的客戶端,其可能包含多個業(yè)務(wù)場景,對于管 理通訊錄的業(yè)務(wù)場景,所述業(yè)務(wù)數(shù)據(jù)為通訊錄中的用戶的號碼信息等,對于管理與特定用戶之間收發(fā)的短信息的業(yè)務(wù)場景,所述業(yè)務(wù)數(shù)據(jù)為與該特定用戶之間收發(fā)的短信息,等等。
一般的,用戶在使用終端上的各類應(yīng)用時,首先,可以登錄應(yīng)用的客戶端,然后,通過在客戶端上進行的各種操作,與對應(yīng)的服務(wù)端(所述服務(wù)端可以位于上述的服務(wù)器上或者其他終端上)進行交互,從而,獲得對應(yīng)的業(yè)務(wù)場景下的業(yè)務(wù)數(shù)據(jù)。
在實際應(yīng)用中,大部分業(yè)務(wù)場景下的業(yè)務(wù)數(shù)據(jù)都是有序的,例如,對于網(wǎng)上購物應(yīng)用的客戶端,用戶可以在客戶端上執(zhí)行查詢訂單、往購物車中添加商品等各種操作,相應(yīng)的,服務(wù)端根據(jù)用戶的操作,按照預(yù)先確定的業(yè)務(wù)邏輯向客戶端發(fā)送對應(yīng)的業(yè)務(wù)數(shù)據(jù),如當(dāng)用戶執(zhí)行查詢訂單操作時,服務(wù)端則將查詢到的用戶下過的每個訂單的詳細信息(也即,業(yè)務(wù)數(shù)據(jù))都發(fā)送至客戶端,在該業(yè)務(wù)場景下,所述的業(yè)務(wù)數(shù)據(jù)即為各訂單的詳細信息,顯然,各訂單的詳細信息相互之間是有序的,且可以用訂單的詳細信息中包含的下單時間,來表示各訂單的詳細信息的順序,下單時間越早的訂單的詳細信息的順序越靠前。
對于用戶在客戶端上執(zhí)行的操作,若服務(wù)端每次都要將對應(yīng)于該操作的全量的業(yè)務(wù)數(shù)據(jù)發(fā)送至客戶端,這樣的話,增加了服務(wù)端的處理負擔(dān)。因此,在本申請實施例中,服務(wù)端可以只向客戶端發(fā)送與用戶操作相關(guān)的業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)(業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù),也即,與該業(yè)務(wù)數(shù)據(jù)屬于同一業(yè)務(wù)場景的新增的業(yè)務(wù)數(shù)據(jù))。繼續(xù)用上例進行說明,假定用戶通過客戶端已經(jīng)查詢過一次訂單,客戶端可以將服務(wù)端查詢后發(fā)送過來的各訂單的詳細信息緩存,然后,下一次用戶再查詢訂單時,假定有新增的該用戶的訂單,則服務(wù)端可以只向客戶端返回該用戶新增的訂單的詳細信息,而不用將之前已經(jīng)發(fā)送過的各訂單的詳細信息再向客戶端發(fā)送一次,從而,降低了服務(wù)端的處理負擔(dān),提高了服務(wù)端的處理效率。其中,在本申請實施例中,所述業(yè)務(wù)數(shù)據(jù)的格式與所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)的格式,可以由客戶端與服務(wù)端之間預(yù)先進行約定,本申請并不做 限定。
進一步的,目前,在某些應(yīng)用場景下,如客戶端與服務(wù)端之間的通信質(zhì)量較差時,或者,客戶端的進程異常時,上述的業(yè)務(wù)數(shù)據(jù)在從服務(wù)端至客戶端的傳輸過程中可能丟失,導(dǎo)致客戶端上缺少丟失的這部分業(yè)務(wù)數(shù)據(jù),而服務(wù)端卻并不知曉,或者,上述的業(yè)務(wù)數(shù)據(jù)從服務(wù)端至客戶端的傳輸過程中,傳輸順序可能錯亂,導(dǎo)致客戶端獲取到亂序的業(yè)務(wù)數(shù)據(jù),影響后續(xù)使用。
在本申請實施例中,服務(wù)端可以基于與客戶端之間建立的長連接,以及客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息,解決上述問題。具體的,基于所述長連接,服務(wù)端可以不用等待客戶端發(fā)送操作請求后,再向客戶端發(fā)送業(yè)務(wù)數(shù)據(jù),而是可以主動向客戶端推送業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù),因此,提高了客戶端和服務(wù)端的處理效率;而基于所述同步信息,服務(wù)端可以確定客戶端上已有的業(yè)務(wù)數(shù)據(jù),進而有序地向客戶端推送該已有的業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù),其中,業(yè)務(wù)數(shù)據(jù)的順序可以由服務(wù)端和/或客戶端根據(jù)業(yè)務(wù)數(shù)據(jù)的業(yè)務(wù)邏輯進行確定。
在本申請實施例中,業(yè)務(wù)數(shù)據(jù)是由服務(wù)端向客戶端進行同步的,所述的同步信息可以反映客戶端上的業(yè)務(wù)數(shù)據(jù)與服務(wù)端上的業(yè)務(wù)數(shù)據(jù)的同步點,也即,對于順序在該同步點之前(包括該同步點)的業(yè)務(wù)數(shù)據(jù),服務(wù)端已經(jīng)同步給了客戶端,而順序在該同步點之后的業(yè)務(wù)數(shù)據(jù),服務(wù)端尚未同步給客戶端。因此,服務(wù)端當(dāng)要向客戶端同步業(yè)務(wù)數(shù)據(jù)時,或者,客戶端主動向服務(wù)端請求業(yè)務(wù)數(shù)據(jù)時,服務(wù)端可以獲取客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息,以便確定向客戶端同步哪些業(yè)務(wù)數(shù)據(jù),以及如何向客戶端同步這些業(yè)務(wù)數(shù)據(jù)。
S102:所述服務(wù)端根據(jù)所述同步信息,通過與所述客戶端之間建立的長連接,向所述客戶端推送所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)。
在本申請實施例中,服務(wù)端可以預(yù)先與客戶端建立并維持長連接,后續(xù)基于該長連接推送業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù),這樣的話,在一段該長連接的持續(xù)時間段內(nèi),客戶端可以不用主動向服務(wù)端請求獲取自身上的業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù),而是,由服務(wù)端主動向客戶端推送這些增量數(shù)據(jù),進一步的,服務(wù)端根據(jù)所述 同步信息,可以有序地向客戶端推送這些增量數(shù)據(jù)。
需要說明的是,所述長連接可以是任一基于傳輸層所使用的通信協(xié)議的長連接,例如傳輸控制協(xié)議(Transmission Control Protocol,TCP)長連接,等等。所述長連接可以采用現(xiàn)有技術(shù)實現(xiàn),例如,采用心跳包方式實現(xiàn),具體的,客戶端與服務(wù)端之間首先建立一條TCP連接,然后,客戶端每隔預(yù)設(shè)時間間隔就向服務(wù)端發(fā)送一次心跳包,服務(wù)端則對該心跳包進行響應(yīng),客戶端判斷是否在規(guī)定的時間內(nèi)收到了服務(wù)端對心跳包的響應(yīng),若是,則確定建立的TCP連接仍然有效,否則,重新與服務(wù)端建立一條TCP連接,上述的TCP連接可以稱為TCP長連接。
通過上述方法,由于服務(wù)端根據(jù)所述同步信息,可以確定客戶端上的已有的業(yè)務(wù)數(shù)據(jù),以及尚未同步過去的業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù),且服務(wù)端與客戶端之間維持有長連接,因此,服務(wù)端可以有序地將尚未同步過去的增量數(shù)據(jù)推送給客戶端,相應(yīng)的,客戶端也可以有序地接收這些增量數(shù)據(jù),且即使增量數(shù)據(jù)在傳輸過程中丟失,服務(wù)端后續(xù)也可以通過所述同步信息知曉,進而向客戶端重傳丟失的增量數(shù)據(jù),從而,提高了客戶端從服務(wù)端獲取到的業(yè)務(wù)數(shù)據(jù)的可靠性。而且,客戶端可以不再頻繁地向服務(wù)端主動請求獲得業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù),而是可以被動地等待服務(wù)端推送這些增量數(shù)據(jù)即可,因此,也減輕了客戶端的處理負擔(dān)。
在本申請實施例中,對于上述步驟S101,服務(wù)端可以通過多種方式獲取客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息,這些獲取方式包括但不限于以下兩種方式:
第一種,服務(wù)端獲取客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息,具體包括:服務(wù)端接收客戶端上報的、所述客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息,并保存所述同步信息。
第二種,服務(wù)端當(dāng)接收到針對客戶端上的業(yè)務(wù)數(shù)據(jù)的同步請求時,查找自身保存的或者在其他位置保存的、所述客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息。其中,所述同步請求既可以由是服務(wù)端上負責(zé)管控業(yè)務(wù)數(shù)據(jù)的模塊所發(fā)送的,也可以 由客戶端發(fā)送的。
客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息可以由客戶端生成,并進行維護更新,對于上述第二種方式,服務(wù)端在自身保存的、所述客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息,顯然,也是在以前與客戶端的交互中,由客戶端發(fā)送至服務(wù)端保存的。進而,當(dāng)服務(wù)端獲取到的同步信息,與自身保存的同步信息不相同時,服務(wù)端進行后續(xù)的推送操作時應(yīng)當(dāng)基于獲取到的同步信息進行操作,且保存獲取到的同步信息,以替換掉之前保存的同步信息,這樣的話,可以提高服務(wù)端所使用的同步信息的實時性和可靠性。
在實際應(yīng)用中,上述第一種方式一般比較適用于用戶在客戶端上實時查詢最新的業(yè)務(wù)數(shù)據(jù)的應(yīng)用場景,或者,客戶端在剛開啟并使用用戶的賬號登錄服務(wù)端的應(yīng)用場景,或者,客戶端向服務(wù)端注冊新的業(yè)務(wù)場景時的應(yīng)用場景。而上述第二種方式比較適用于服務(wù)端的業(yè)務(wù)數(shù)據(jù)發(fā)生更新(也即,生成了客戶端上的業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)),且有必要及時向客戶端同步這些增量數(shù)據(jù)的應(yīng)用場景。
在本申請實施例中,客戶端上的業(yè)務(wù)數(shù)據(jù)可以由多個業(yè)務(wù)數(shù)據(jù)塊組成,類似的,所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)相應(yīng)的也可以由多個增量數(shù)據(jù)塊組成,且這些業(yè)務(wù)數(shù)據(jù)塊和增量數(shù)據(jù)塊是有序的。后續(xù)每個增量數(shù)據(jù)塊被推送至客戶端后,即可作為客戶端上新增的一個業(yè)務(wù)數(shù)據(jù)塊,這樣的話,服務(wù)端可以根據(jù)為各業(yè)務(wù)數(shù)據(jù)塊和各增量數(shù)據(jù)塊生成的順序標識,將各增量數(shù)據(jù)塊有序地推送給客戶端,且服務(wù)端可以根據(jù)獲取的客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息確定當(dāng)前客戶端上接收增量數(shù)據(jù)塊的進度,進而確定是否有已發(fā)送的增量數(shù)據(jù)塊在傳輸途中丟失,若是,則服務(wù)器可以重新向客戶端推送丟失的增量數(shù)據(jù)塊。
根據(jù)上述說明,在上述步驟S102中,所述服務(wù)端根據(jù)所述同步信息,通過與所述客戶端之間建立的長連接,向所述客戶端推送所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù),具體包括:所述服務(wù)端根據(jù)所述同步信息包含的順序標識,以及為所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)包含的各增量數(shù)據(jù)塊生成的順序標識,通過與所述客戶端之 間建立的長連接,向所述客戶端推送所述各增量數(shù)據(jù)塊。
進一步地對所述業(yè)務(wù)數(shù)據(jù)和所述業(yè)務(wù)數(shù)據(jù)塊進行詳細說明。對于應(yīng)用而言,應(yīng)用會為登錄的不同用戶維護不同的業(yè)務(wù)數(shù)據(jù),且業(yè)務(wù)數(shù)據(jù)又可以屬于不同的業(yè)務(wù)場景,因此,為了區(qū)分對應(yīng)于不同用戶,以及對應(yīng)于不同業(yè)務(wù)場景的業(yè)務(wù)數(shù)據(jù),可以用用戶標識和業(yè)務(wù)場景類型標識對業(yè)務(wù)數(shù)據(jù)進行標識。具體的,所述業(yè)務(wù)數(shù)據(jù)具體包括用戶標識、業(yè)務(wù)場景類型標識,以及有序的至少一個業(yè)務(wù)數(shù)據(jù)塊,其中,每個業(yè)務(wù)數(shù)據(jù)塊在所述業(yè)務(wù)數(shù)據(jù)中的順序,由所述服務(wù)端生成的該業(yè)務(wù)數(shù)據(jù)塊的順序標識表示。
所述業(yè)務(wù)數(shù)據(jù)塊可以是所述業(yè)務(wù)數(shù)據(jù)中的最小的邏輯單位,在此仍以即時通訊應(yīng)用為例進行說明。假定用戶A用自己的用戶標識登錄該即時通訊應(yīng)用,并使用該即時通訊應(yīng)用中的短信息功能,則對應(yīng)的業(yè)務(wù)場景為短信息業(yè)務(wù)場景,該即時通訊應(yīng)用為用戶A維護的、與某位通訊聯(lián)系人之間收發(fā)的所有短信息,可稱為在短信息業(yè)務(wù)場景下的業(yè)務(wù)數(shù)據(jù),進而,該業(yè)務(wù)數(shù)據(jù)所包含的每個業(yè)務(wù)數(shù)據(jù)塊對應(yīng)為一條短信息。顯然,各短信息之間是有序的,收發(fā)時間越靠前的短信息的順序越靠前。對于客戶端業(yè)務(wù)數(shù)據(jù)中的每個業(yè)務(wù)數(shù)據(jù)塊,可以由服務(wù)端預(yù)先為其生成該業(yè)務(wù)數(shù)據(jù)塊的順序標識,用于表示該業(yè)務(wù)數(shù)據(jù)塊在各業(yè)務(wù)數(shù)據(jù)塊中的順序。相應(yīng)的,所述同步信息可以包括所述用戶標識、所述業(yè)務(wù)場景標識、所述業(yè)務(wù)數(shù)據(jù)包含的、順序位于最后的業(yè)務(wù)數(shù)據(jù)塊的順序標識。
在本申請實施例中,所述服務(wù)端可以按照如下方法為所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)包含的各增量數(shù)據(jù)塊生成順序標識:所述服務(wù)端確定保存的、對應(yīng)于所述同步信息包含的用戶標識和業(yè)務(wù)場景標識的數(shù)據(jù)塊,作為所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)包含的增量數(shù)據(jù)塊,并根據(jù)所述業(yè)務(wù)數(shù)據(jù)包含的各業(yè)務(wù)數(shù)據(jù)塊的順序標識,以及所述各業(yè)務(wù)數(shù)據(jù)塊與各增量數(shù)據(jù)塊之間的業(yè)務(wù)邏輯順序,分別為每個增量數(shù)據(jù)塊生成順序標識,其中,每個增量數(shù)據(jù)塊的順序標識表示了該增量數(shù)據(jù)塊在所述各業(yè)務(wù)數(shù)據(jù)塊和各增量數(shù)據(jù)塊中的順序。
其中,業(yè)務(wù)邏輯順序可以反映客戶端上的各業(yè)務(wù)數(shù)據(jù)塊和服務(wù)端后續(xù)要推 送過來的各增量數(shù)據(jù)塊之間在業(yè)務(wù)上的順序。仍以短信息業(yè)務(wù)場景為例進行說明,假定當(dāng)前客戶端上有兩個業(yè)務(wù)數(shù)據(jù)塊(也即,兩條短信息),根據(jù)短信息一般的業(yè)務(wù)邏輯,接收和/或發(fā)出時間靠前的短消息的順序,應(yīng)當(dāng)比接收和/或發(fā)出時間靠后的短消息的順序靠前,則可以認為:前者的業(yè)務(wù)邏輯順序比后者靠前。
更進一步的,所述服務(wù)端根據(jù)所述同步信息包含的順序標識,以及為所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)包含的各增量數(shù)據(jù)塊生成的順序標識,通過與所述客戶端之間建立的長連接,向所述客戶端推送所述各增量數(shù)據(jù)塊,具體包括:所述服務(wù)端在各增量數(shù)據(jù)塊中,確定出順序在所述同步信息包含的順序標識對應(yīng)的業(yè)務(wù)數(shù)據(jù)塊之后的增量數(shù)據(jù)塊,并按照增量數(shù)據(jù)塊的順序,將確定出的各增量數(shù)據(jù)塊通過與所述客戶端之間建立的長連接推送給所述客戶端,使所述客戶端在接收到所述服務(wù)端推送的每個增量數(shù)據(jù)塊后,將該增量數(shù)據(jù)塊作為業(yè)務(wù)數(shù)據(jù)塊加入所述業(yè)務(wù)數(shù)據(jù)中,并更新所述同步信息。
在實際應(yīng)用中,服務(wù)端可以為要向客戶端進行推送的增量數(shù)據(jù)塊定義相應(yīng)的數(shù)據(jù)結(jié)構(gòu)作為容器,針對每個增量數(shù)據(jù)塊,將對應(yīng)于所述同步信息包含的用戶標識和業(yè)務(wù)場景標識,以及該增量數(shù)據(jù)塊、生成的該增量數(shù)據(jù)塊的順序標識均置于同一個容器中進行推送,這樣的話,可以提高服務(wù)端的處理效率,也便于客戶端接收后進行處理。以下舉例進行說明。
例如,服務(wù)端為增量數(shù)據(jù)塊定義的容器可以是名為操作日志OPLOG的數(shù)據(jù)結(jié)構(gòu),OPLOG至少包含4個字段:PAYLOAD(表示增量數(shù)據(jù)塊)、USER ID(表示用戶標識)、BIZ_TYPE(表示業(yè)務(wù)場景類型標識)、OPLOG ID(表示增量數(shù)據(jù)塊的順序標識)。則每當(dāng)服務(wù)端增加一個增量數(shù)據(jù)塊,服務(wù)端可以對應(yīng)地生成一條OPLOG,當(dāng)服務(wù)端要向客戶端同步業(yè)務(wù)數(shù)據(jù)時,僅需將順序位于獲取的同步信息包含的順序標識之后的各OPLOG推送給客戶端即可。相應(yīng)的,客戶端在接收到OPLOG后,將其包含的各增量數(shù)據(jù)塊提取出來,然后,并根據(jù)各增量數(shù)據(jù)的順序標識,將各增量數(shù)據(jù)作為新增的業(yè)務(wù)數(shù)據(jù)塊加入自身 上的業(yè)務(wù)數(shù)據(jù)中,再將同步信息中的順序標識更新為:加入各增量數(shù)據(jù)后,自身上的業(yè)務(wù)數(shù)據(jù)中順序最靠后的順序標識。需要說明的是,若加入各增量數(shù)據(jù)后,客戶端上的各業(yè)務(wù)數(shù)據(jù)塊的順序標識不連續(xù),也即,各順序標識中缺少至少一個順序標識,則可以推測出服務(wù)端已發(fā)送的某些增量數(shù)據(jù)塊(對應(yīng)于缺少的順序標識的增量數(shù)據(jù)塊)可能已在傳輸過程中丟失,在這種情況下,客戶端可以將同步信息中的順序標識更新為:加入各增量數(shù)據(jù)后,自身上的業(yè)務(wù)數(shù)據(jù)保持連續(xù)的前提下順序最靠后的業(yè)務(wù)數(shù)據(jù)塊的順序標識。這樣的話,服務(wù)端可以根據(jù)更新后的同步信息,重新向客戶端推送丟失的增量數(shù)據(jù)塊。
另外,需要說明的是,對于當(dāng)前客戶端上的各業(yè)務(wù)數(shù)據(jù)塊,在這些業(yè)務(wù)數(shù)據(jù)塊之前尚未被服務(wù)端推送至客戶端時,這些業(yè)務(wù)數(shù)據(jù)塊的順序標識也是由服務(wù)端,采用為各增量數(shù)據(jù)塊生成順序標識的方法生成的。
為了便于理解,在此舉例一些可行的、生成順序標識的具體實現(xiàn)方法:
服務(wù)端可以用正整數(shù)作為順序標識,則數(shù)值越小的順序標識的順序越靠前。假定客戶端上的業(yè)務(wù)數(shù)據(jù)中的各業(yè)務(wù)數(shù)據(jù)塊的順序標識為1~8,服務(wù)端上除了有這些業(yè)務(wù)數(shù)據(jù)塊之外,還有若干增量數(shù)據(jù)塊(假定有8個),則客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息包含的順序標識為8,則服務(wù)端按照這8個增量數(shù)據(jù)塊之間的業(yè)務(wù)邏輯關(guān)系,為這8個增量數(shù)據(jù)塊分別生成順序標識9~16,其中,順序越靠前的增量數(shù)據(jù)塊的順序標識越小。也即,客戶端上的各業(yè)務(wù)數(shù)據(jù)塊與服務(wù)端后續(xù)推送過來的各增量數(shù)據(jù)塊的順序標識,是按照業(yè)務(wù)邏輯順序遞增的。類似的,除了正整數(shù)之外,服務(wù)端還可以用其他有序的字符集作為順序標識,例如,英文字母等。
另外,在分布式應(yīng)用場景下,由于同一個客戶端可能對應(yīng)于多個服務(wù)端,多個服務(wù)端可能會同時執(zhí)行生成順序標識的操作,則多個服務(wù)端可能為不同的增量數(shù)據(jù)塊生成同一個順序標識,從而影響后續(xù)推送過程的可靠性。在本申請實施例中,可以采用鎖機制解決這個問題,其中,所述鎖機制包括但不限于樂觀鎖機制和悲觀鎖機制。具體的,采用樂觀鎖機制時,服務(wù)端在向數(shù)據(jù)庫提交 生成順序標識請求前,先從數(shù)據(jù)庫中取得已保存的最新的順序標識(稱為當(dāng)前值),然后,在提交生成順序標識請求時攜帶該當(dāng)前值,數(shù)據(jù)庫接收到該生成順序標識請求后,會判斷該當(dāng)前值是否與數(shù)據(jù)庫中順序標識實際的當(dāng)前值相同,若是,則成功處理該生成順序標識請求,否則,向服務(wù)端返回失敗響應(yīng),相應(yīng)的,服務(wù)器接收到失敗響應(yīng)后可以重試,從而可以防止順序標識重復(fù)生成。而采用悲觀鎖機制時,當(dāng)某個服務(wù)端正在向數(shù)據(jù)庫提交生成順序標識請求時,即將順序標識鎖定,而其他服務(wù)端需要在數(shù)據(jù)庫維護等待隊列中,等待鎖釋放后才能繼續(xù)生成順序標識,從而可以防止順序標識重復(fù)生成。顯然,這兩種鎖機制各有優(yōu)缺點,樂觀鎖機制不需要數(shù)據(jù)庫維護等待隊列,對請求方的響應(yīng)速度快,不會阻塞請求方,但請求方處理模式相對復(fù)雜,悲觀鎖請求方處理模式簡單,但數(shù)據(jù)庫開銷相對大。可以根據(jù)不同的應(yīng)用場景選擇更適用的鎖機制。
根據(jù)上述的說明,圖2中示出了,在一種實際應(yīng)用場景下,本申請實施例提供的數(shù)據(jù)推送詳細過程。其中,將所述客戶端具體劃分為三個功能模塊:業(yè)務(wù)客戶端模塊、同步(Synchronization,SYNC)客戶端模塊、長連接客戶端模塊;將所述服務(wù)端也具體劃分為三個功能模塊:業(yè)務(wù)服務(wù)端模塊、SYNC服務(wù)端模塊、長連接服務(wù)端模塊。具體包括以下步驟:
S201:SYNC客戶端模塊生成客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息,并轉(zhuǎn)交給長連接客戶端模塊。
S202:長連接客戶端模塊預(yù)先地、或者實時地與長連接服務(wù)端模塊之間建立長連接,并通過該長連接,將該同步信息上報給長連接服務(wù)端模塊。
在建立長連接時,具體的,長連接客戶端模塊和長連接服務(wù)端模塊可以建立一條TCP雙向通訊連接,建立成功后,長連接客戶端模塊每隔預(yù)設(shè)時間段向長連接服務(wù)端模塊發(fā)送一個心跳包,長連接服務(wù)端模塊則在預(yù)設(shè)時間內(nèi)響應(yīng)該心跳包,從而可以維持該TCP雙向通訊連接,該TCP雙向通訊連接即可稱為長連接。
S203:長連接服務(wù)端模塊將該同步信息轉(zhuǎn)交給SYNC服務(wù)端模塊。
S204:SYNC服務(wù)端模塊根據(jù)該同步信息,確定出所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)。
S205:SYNC服務(wù)端模塊將該增量數(shù)據(jù)轉(zhuǎn)交給長連接服務(wù)端模塊。
S206:長連接服務(wù)端模塊將該增量數(shù)據(jù),通過建立的長連接,推送給長連接客戶端。
S207:長連接客戶端將該增量數(shù)據(jù)轉(zhuǎn)交給SYNC客戶端模塊。
S208:SYNC客戶端模塊從增量數(shù)據(jù)中提取出各增量數(shù)據(jù)塊,轉(zhuǎn)交給業(yè)務(wù)客戶端模塊。
S209:SYNC客戶端模塊根據(jù)提取出的各增量數(shù)據(jù)塊的順序標識,對自身上業(yè)務(wù)數(shù)據(jù)的同步信息進行更新,以及通知SYNC服務(wù)端模塊更新保存的同步信息。
圖3中示出了,在另一種實際應(yīng)用場景下,本申請實施例提供的數(shù)據(jù)推送詳細過程。其中,所述客戶端和所述服務(wù)端的功能模塊,仍按照圖2的說明進行劃分。具體包括以下步驟:
S301:業(yè)務(wù)服務(wù)端模塊向SYNC服務(wù)端模塊發(fā)送增量數(shù)據(jù)同步請求。
S302:SYNC服務(wù)端模塊根據(jù)服務(wù)端上保存的同步信息,確定出客戶端上的業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)。
S303:SYNC服務(wù)端模塊將該增量數(shù)據(jù)轉(zhuǎn)交給長連接服務(wù)端模塊。
S304:長連接服務(wù)端模塊將該增量數(shù)據(jù),通過建立的長連接,推送給長連接客戶端。
S305:長連接客戶端將該增量數(shù)據(jù)轉(zhuǎn)交給SYNC客戶端模塊。
S306:SYNC客戶端模塊從增量數(shù)據(jù)中提取出各增量數(shù)據(jù)塊,轉(zhuǎn)交給業(yè)務(wù)客戶端模塊。
S307:SYNC客戶端模塊根據(jù)提取出的各增量數(shù)據(jù)塊的順序標識,對自身上業(yè)務(wù)數(shù)據(jù)的同步信息進行更新,以及通知SYNC服務(wù)端模塊更新保存的同步信息。
可以看到,圖2中的數(shù)據(jù)推送過程是由客戶端主動觸發(fā),而圖3中的數(shù)據(jù)推送過程是由服務(wù)端端主動觸發(fā),這是本申請實施例所述提供的數(shù)據(jù)推送方法的兩種典型實際應(yīng)用場景。
進一步的,在實際應(yīng)用中,也可以不按照圖2和圖3來劃分客戶端和服務(wù)端的功能模塊,而是劃分為其他的功能模塊。本申請對所述客戶端和所述服務(wù)端的功能模塊劃分和架構(gòu)組織并不做限定。
圖4為本申請實施例提供的對應(yīng)于圖1的數(shù)據(jù)推送過程,執(zhí)行主體為本申請實施例中所述的客戶端,具體包括以下步驟:
S401:客戶端針對自身上的業(yè)務(wù)數(shù)據(jù),生成所述業(yè)務(wù)數(shù)據(jù)的同步信息。
S402:所述客戶端將所述同步信息上報給服務(wù)端,以便于所述服務(wù)端根據(jù)所述同步信息,向所述客戶端推送所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)。
以上為本申請實施例提供的數(shù)據(jù)推送方法,基于同樣的思路,本申請實施例還提供相應(yīng)的數(shù)據(jù)推送裝置,如圖5、圖6所示。
圖5為本申請實施例提供的數(shù)據(jù)推送裝置結(jié)構(gòu)示意圖,具體包括:
獲取模塊501,用于獲取客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息;
推送模塊502,用于根據(jù)所述同步信息,通過與所述客戶端之間建立的長連接,向所述客戶端推送所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)。
所述獲取模塊501具體用于,接收客戶端上報的、所述客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息,并保存所述同步信息。
所述獲取模塊501具體用于,當(dāng)接收到針對客戶端上的業(yè)務(wù)數(shù)據(jù)的同步請求時,查找保存的、所述客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息。
所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)包含至少一個增量數(shù)據(jù)塊;
所述推送模塊502具體用于,根據(jù)所述同步信息包含的順序標識,以及為所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)包含的各增量數(shù)據(jù)塊生成的順序標識,通過與所述客戶端之間建立的長連接,向所述客戶端推送所述各增量數(shù)據(jù)塊。
所述業(yè)務(wù)數(shù)據(jù)具體包括用戶標識、業(yè)務(wù)場景類型標識,以及有序的至少一 個業(yè)務(wù)數(shù)據(jù)塊,其中,每個業(yè)務(wù)數(shù)據(jù)塊在所述業(yè)務(wù)數(shù)據(jù)中的順序,由所述服務(wù)端生成的該業(yè)務(wù)數(shù)據(jù)塊的順序標識表示;
所述同步信息具體包括所述用戶標識、所述業(yè)務(wù)場景標識、所述業(yè)務(wù)數(shù)據(jù)包含的、順序位于最后的業(yè)務(wù)數(shù)據(jù)塊的順序標識。
所述推送模塊502還用于為所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)包含的各增量數(shù)據(jù)塊生成順序標識;
所述推送模塊502具體用于,確定保存的、對應(yīng)于所述同步信息包含的用戶標識和業(yè)務(wù)場景標識的數(shù)據(jù)塊,作為所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)包含的增量數(shù)據(jù)塊,并根據(jù)所述業(yè)務(wù)數(shù)據(jù)包含的各業(yè)務(wù)數(shù)據(jù)塊的順序標識,以及所述各業(yè)務(wù)數(shù)據(jù)塊與各增量數(shù)據(jù)塊之間的業(yè)務(wù)邏輯順序,分別為每個增量數(shù)據(jù)塊生成順序標識,其中,每個增量數(shù)據(jù)塊的順序標識表示了該增量數(shù)據(jù)塊在所述各業(yè)務(wù)數(shù)據(jù)塊和各增量數(shù)據(jù)塊中的順序。
所述推送模塊502具體用于,在各增量數(shù)據(jù)塊中,確定出順序在所述同步信息包含的順序標識對應(yīng)的業(yè)務(wù)數(shù)據(jù)塊之后的增量數(shù)據(jù)塊,并按照增量數(shù)據(jù)塊的順序,將確定出的各增量數(shù)據(jù)塊通過與所述客戶端之間建立的長連接推送給所述客戶端,使所述客戶端在接收到所述服務(wù)端推送的每個增量數(shù)據(jù)塊后,將該增量數(shù)據(jù)塊作為業(yè)務(wù)數(shù)據(jù)塊加入所述業(yè)務(wù)數(shù)據(jù)中,并更新所述同步信息。
具體的上述如圖5所示的裝置可以位于服務(wù)端上。
圖6為本申請實施例提供的另一種數(shù)據(jù)推送裝置結(jié)構(gòu)示意圖,具體包括:
生成模塊601,用于針對客戶端上的業(yè)務(wù)數(shù)據(jù),生成所述業(yè)務(wù)數(shù)據(jù)的同步信息;
上報模塊602,用于將所述同步信息上報給服務(wù)端,以便于所述服務(wù)端根據(jù)所述同步信息,向所述客戶端推送所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)。
具體的上述如圖6所示的裝置可以位于客戶端上。
本申請實施例提供一種數(shù)據(jù)推送方法及裝置,該方法服務(wù)端獲取客戶端上的業(yè)務(wù)數(shù)據(jù)的同步信息,所述服務(wù)端根據(jù)所述同步信息,通過與所述客戶端之 間建立的長連接,向所述客戶端推送所述業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù)。通過上述方法,由于服務(wù)端根據(jù)所述同步信息,可以確定客戶端上的已經(jīng)有的業(yè)務(wù)數(shù)據(jù),以及尚未同步過去的業(yè)務(wù)數(shù)據(jù)的增量數(shù)據(jù),且服務(wù)端與客戶端之間維持有長連接,因此,服務(wù)端可以有序地將尚未同步過去的增量數(shù)據(jù)推送給客戶端,且即使增量數(shù)據(jù)在傳輸過程中丟失,服務(wù)端后續(xù)也可以通過所述同步信息知曉,進而向客戶端重傳丟失的增量數(shù)據(jù),從而,提高了客戶端從服務(wù)端獲取到的業(yè)務(wù)數(shù)據(jù)的可靠性。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個 流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
在一個典型的配置中,計算設(shè)備包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。
本領(lǐng)域技術(shù)人員應(yīng)明白,本申請的實施例可提供為方法、系統(tǒng)或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、 光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
以上所述僅為本申請的實施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。