本發(fā)明涉及通信技術領域,特別涉及一種數(shù)據(jù)傳輸方法、裝置及系統(tǒng)。
背景技術:
隨著互聯(lián)網(wǎng)技術的不斷發(fā)展,客戶端及服務端能夠支持的報文序列化的方式越來越多,不同的客戶端及服務端支持的序列化方式可能不同。但客戶端與服務端在進行數(shù)據(jù)交互時必須要采用同一種序列化方式對數(shù)據(jù)進行封裝和解析。
為了實現(xiàn)序列化方式的統(tǒng)一,現(xiàn)有技術采用的技術方案為:客戶端與服務端發(fā)起數(shù)據(jù)交互前先進行一次報文交互,協(xié)商出一種雙方都支持的報文序列化方式,并在后續(xù)進行數(shù)據(jù)交互時使用協(xié)商出的序列化方式進行數(shù)據(jù)交互。然而這種通過報文協(xié)商實現(xiàn)序列化方式的統(tǒng)一需要在數(shù)據(jù)交互前多進行一次報文交互,增大了網(wǎng)絡的負載,嚴重影響到客戶端與服務端進行數(shù)據(jù)交互的效率。
技術實現(xiàn)要素:
本發(fā)明提供一種數(shù)據(jù)傳輸方法、裝置及系統(tǒng),用于解決現(xiàn)有技術存在客戶端與服務端需要在數(shù)據(jù)交互前協(xié)商報文序列化方式,導致網(wǎng)絡復負載量大的技術問題。
本發(fā)明實施例第一方面提供一種數(shù)據(jù)傳輸系統(tǒng),包括客戶端和服務端;
所述客戶端用于:以第一序列化方式對請求數(shù)據(jù)進行序列化處理,獲得序列化的請求數(shù)據(jù);生成第一超文本傳輸協(xié)議(hypertexttransferprotocol,http)請求報文,所述第一http請求報文攜帶所述序列化的請求數(shù)據(jù)以及表征所述第一序列化方式的標識;將所述第一http請求報文發(fā)送給服務端;
所述服務端用于:接收所述客戶端發(fā)送的所述第一http請求報文;從所述第一http請求報文中獲得所述標識,判斷所述服務端是否支持所述標識表征的所述第一序列化方式;在所述服務端支持所述第一序列化方式時,根據(jù)所述第一序列化方式從所述第一http請求報文中獲得所述請求數(shù)據(jù)。
在上述方案中,客戶端與服務端可以不需要在數(shù)據(jù)交互前協(xié)商報文序列化方式,而是客戶端直接向服務端發(fā)送發(fā)送承載著請求數(shù)據(jù)的請求報文;當服務端接收到客戶端發(fā)送的請求報文時,可通過識別請求報文攜帶的標識確定客戶端的序列化方式,并在服務端支持該序列化方式時對請求報文進行反序列化處理,從而獲得客戶端發(fā)送的請求數(shù)據(jù)。本方案解決了客戶端與服務端需要在數(shù)據(jù)交互前協(xié)商報文序列化方式導致的網(wǎng)絡復負載量大的技術問題,提高了客戶端與服務端的數(shù)據(jù)交互效率。不僅如此,本方案中的服務端能夠支持本領域常用的序列化方式,所以可以不需要針對客戶端開發(fā)多種報文序列化方式去對接不同的服務端,節(jié)約了服務端的開發(fā)成本。
可選的,所述服務端還用于:在獲得所述請求數(shù)據(jù)之后,對所述請求數(shù)據(jù)進行處理,得到響應數(shù)據(jù);以所述第一序列化方式對所述響應數(shù)據(jù)進行序列化處理,獲得序列化的響應數(shù)據(jù);生成第一http響應報文,所述第一http響應報文攜帶所述序列化的響應數(shù)據(jù);將所述第一http響應報文發(fā)送給所述客戶端;所述客戶端還用于:接收所述服務端發(fā)送的所述第一http響應報文;根據(jù)所述第一序列化方式從所述第一http響應報文中獲得所述響應數(shù)據(jù)。通過本方式,服務端在支持客戶端對請求數(shù)據(jù)進行序列化的序列化方式時,可采用該序列化方式對客戶端進行響應,進一步完善了客戶端與服務端之間進行數(shù)據(jù)傳輸?shù)姆桨浮?/p>
可選的,所述表征所述第一序列化方式的標識位于所述第一http請求報文的請求行中,或者位于所述第一http請求報文的請求頭中,或者位于所述第一http請求報文的請求正文中。通過本方式,客戶端與服務端可以在攜帶通信數(shù)據(jù)的報文中攜帶客戶端對數(shù)據(jù)進行序列化處理的序列化方式,不需要在數(shù)據(jù)交互前進行序列化方式的協(xié)商過程,完善了上述客戶端與服務端之間進行數(shù)據(jù)傳輸?shù)姆桨浮?/p>
可選的,所述表征所述第一序列化方式的標識以后綴的形式或以路徑參數(shù)的形式位于所述第一http請求報文的請求行中的統(tǒng)一資源定位符(uniformresourcelocator,url)中。通過本方式可以減小報文的大小,進一步減輕網(wǎng)絡負載,提高客戶端與服務端之間進行數(shù)據(jù)傳輸?shù)男省?/p>
可選的,所述服務端還用于:在所述服務端不支持所述第一序列化方式時,所述服務端確定所述服務端支持的至少一種序列化方式;生成第二http響應報文,所述第二http響應報文攜帶表征所述服務端支持的至少一種序列化方式的標識;將所述第二http響應報文發(fā)送給所述客戶端;所述客戶端還用于:接收所述服務端發(fā)送的所述第二http響應報文,從所述第二http響應報文中獲知所述服務端支持的所述至少一種序列化方式;確定所述客戶端及所述服務端共同支持的序列化方式;以第二序列化方式對所述請求數(shù)據(jù)進行序列化處理,獲得序列化的請求數(shù)據(jù),其中所述第二序列化方式為所述客戶端及所述服務端共同支持的序列化方式中的任一序列化方式;生成第二http請求報文,所述第二http請求報文攜帶所述序列化的請求數(shù)據(jù)以及表征所述第二序列化方式的標識;將所述第二http請求報文發(fā)送給所述服務端。在本方式中,如果服務端不支持所述第一序列化方式,則服務端可以將其支持的序列化方式反饋給客戶端,讓客戶端從服務端反饋的序列化方式中選擇出客戶端與服務端共同支持的序列化方式再次發(fā)起數(shù)據(jù)交互,通過本方式,可以在減輕網(wǎng)絡負載的同時保證數(shù)據(jù)交互的成功率,進一步完善了客戶端與服務端之間進行數(shù)據(jù)傳輸?shù)姆桨浮?/p>
本發(fā)明實施例第二方面提供一種數(shù)據(jù)傳輸方法,應用于客戶端,所述方法包括:所述客戶端以第一序列化方式對請求數(shù)據(jù)進行序列化處理,獲得序列化的請求數(shù)據(jù);所述客戶端生成第一http請求報文,所述第一http請求報文攜帶所述序列化的請求數(shù)據(jù)以及表征所述第一序列化方式的標識;所述客戶端將所述第一http請求報文發(fā)送給服務端。
可選的,所述表征所述第一序列化方式的標識位于所述第一http請求報文的請求行中,或者位于所述第一http請求報文的請求頭中,或者位于所述第一http請求報文的請求正文中。
可選的,所述表征所述第一序列化方式的標識以后綴的形式或以路徑參數(shù)的形式位于所述第一http請求報文的請求行中的url中。
可選的,在所述客戶端將所述第一http請求報文發(fā)送給服務端之后,所述方法還包括:所述客戶端接收所述服務端返回的響應報文,根據(jù)所述響應報文的狀態(tài)行中的狀態(tài)碼確定所述響應報文攜帶序列化的響應數(shù)據(jù);所述客戶端根據(jù)所述第一序列化方式從所述響應報文中獲得響應數(shù)據(jù)。
可選的,在所述客戶端將所述第一http請求報文發(fā)送給服務端之后,所述方法還包括:所述客戶端接收所述服務端發(fā)送的響應報文,根據(jù)所述響應報文的狀態(tài)行中的狀態(tài)碼確定所述響應報文攜帶表征所述服務端支持的至少一種序列化方式的標識;所述客戶端從所述響應報文中獲知所述服務端支持的至少一種序列化方式;所述客戶端確定所述客戶端及所述服務端共同支持的序列化方式;所述客戶端以第二序列化方式對所述請求數(shù)據(jù)進行序列化處理,獲得序列化的請求數(shù)據(jù),其中所述第二序列化方式為所述客戶端及所述服務端共同支持的序列化方式中的任一序列化方式;所述客戶端生成第二http請求報文,所述第二http請求報文攜帶所述序列化的請求數(shù)據(jù)以及表征所述第二序列化方式的標識;所述客戶端將所述第二http請求報文發(fā)送給所述服務端。
本發(fā)明實施例第三方面提供一種數(shù)據(jù)傳輸方法,應用于服務端,所述方法包括:所述服務端接收客戶端發(fā)送的第一http請求報文,所述第一http請求報文攜帶序列化的請求數(shù)據(jù)以及表征所述客戶端對請求數(shù)據(jù)進行序列化處理的第一序列化方式的標識;所述服務端從所述第一http請求報文中獲得所述標識,判斷所述服務端是否支持所述標識表征的所述第一序列化方式;如果所述服務端支持所述第一序列化方式,則所述服務端根據(jù)所述第一序列化方式從所述第一http請求報文中獲得所述請求數(shù)據(jù)。
可選的,所述表征所述第一序列化方式的標識位于所述第一http請求報文的請求行中,或者位于所述第一http請求報文的請求頭中,或者位于所述第一http請求報文的請求正文中。
可選的,所述表征所述第一序列化方式的標識以后綴的形式或以路徑參數(shù)的形式位于所述第一http請求報文的請求行中的url中。
可選的,在所述服務端獲得所述請求數(shù)據(jù)之后,所述方法還包括:所述服務端對所述請求數(shù)據(jù)進行處理,得到響應數(shù)據(jù);所述服務端以所述第一序列化方式對所述響應數(shù)據(jù)進行序列化處理,獲得序列化的響應數(shù)據(jù);所述服務端生成第一http響應報文,所述第一http響應報文攜帶所述序列化的響應數(shù)據(jù);所述服務端將所述第一http響應報文發(fā)送給所述客戶端。
可選的,在所述服務端判斷所述服務端是否支持所述第一序列化方式之后,所述方法還包括:如果所述服務端不支持所述第一序列化方式,則所述服務端確定所述服務端支持的至少一種序列化方式;所述服務端生成第二http響應報文,所述第二http響應報文攜帶表征所述服務端支持的至少一種序列化方式的標識;所述服務端將所述第二http響應報文發(fā)送給所述客戶端。
本發(fā)明實施例第四方面提供一種數(shù)據(jù)傳輸裝置,包括:處理單元,用于:以第一序列化方式對請求數(shù)據(jù)進行序列化處理,獲得序列化的請求數(shù)據(jù);生成第一http請求報文,所述第一http請求報文攜帶所述序列化的請求數(shù)據(jù)以及表征所述第一序列化方式的標識;發(fā)送單元,用于:將所述第一http請求報文發(fā)送給服務端。
可選的,所述裝置還包括:接收單元,用于:在所述發(fā)送單元將所述第一http請求報文發(fā)送給所述服務端之后,接收所述服務端返回的響應報文;所述處理單元還用于:根據(jù)所述響應報文的狀態(tài)行中的狀態(tài)碼確定所述響應報文攜帶序列化的響應數(shù)據(jù);根據(jù)所述第一序列化方式從所述響應報文中獲得響應數(shù)據(jù)。
可選的,所述裝置還包括:接收單元,用于:在所述發(fā)送單元將所述第一http請求報文發(fā)送給所述服務端之后,接收所述服務端發(fā)送的響應報文;所述處理單元還用于:根據(jù)所述響應報文的狀態(tài)行中的狀態(tài)碼確定所述響應報文攜帶表征所述服務端支持的至少一種序列化方式的標識;從所述響應報文中獲知所述服務端支持的至少一種序列化方式;確定所述裝置及所述服務端共同支持的序列化方式;以第二序列化方式對所述請求數(shù)據(jù)進行序列化處理,獲得序列化的請求數(shù)據(jù),其中所述第二序列化方式為所述裝置及所述服務端共同支持的序列化方式中的任一序列化方式;生成第二http請求報文,所述第二http請求報文攜帶所述序列化的請求數(shù)據(jù)以及表征所述第二序列化方式的標識;所述發(fā)送單元還用于:將所述第二http請求報文發(fā)送給所述服務端。
可選的,所述表征所述第一序列化方式的標識位于所述第一http請求報文的請求行中,或者位于所述第一http請求報文的請求頭中,或者位于所述第一http請求報文的請求正文中。
可選的,所述表征所述第一序列化方式的標識以后綴的形式或以路徑參數(shù)的形式位于所述第一http請求報文的請求行中的url中。
本發(fā)明實施例第五方面提供一種數(shù)據(jù)傳輸裝置,包括:接收單元,用于:接收客戶端發(fā)送的第一http請求報文,所述第一http請求報文攜帶序列化的請求數(shù)據(jù)以及表征所述客戶端對請求數(shù)據(jù)進行序列化處理的第一序列化方式的標識;處理單元,用于:從所述第一http請求報文中獲得所述標識,判斷所述裝置是否支持所述標識表征的所述第一序列化方式;在所述裝置支持所述第一序列化方式時,根據(jù)所述第一序列化方式從所述第一http請求報文中獲得所述請求數(shù)據(jù)。
可選的,所述處理單元還用于:對所述請求數(shù)據(jù)進行處理,得到響應數(shù)據(jù);以所述第一序列化方式對所述響應數(shù)據(jù)進行序列化處理,獲得序列化的響應數(shù)據(jù);生成第一http響應報文,所述第一http響應報文攜帶所述序列化的響應數(shù)據(jù);所述裝置還包括發(fā)送單元,用于:將所述第一http響應報文發(fā)送給所述客戶端。
可選的,所述處理單元還用于:在所述裝置不支持所述第一序列化方式時,確定所述裝置支持的至少一種序列化方式;生成第二http響應報文,所述第二http響應報文攜帶表征所述裝置支持的至少一種序列化方式的標識;所述裝置還包括發(fā)送單元,用于:將所述第二http響應報文發(fā)送給所述客戶端。
可選的,所述表征所述第一序列化方式的標識位于所述第一http請求報文的請求行中,或者位于所述第一http請求報文的請求頭中,或者位于所述第一http請求報文的請求正文中。
可選的,所述表征所述第一序列化方式的標識以后綴的形式或以路徑參數(shù)的形式位于所述第一http請求報文的請求行中的url中。
本發(fā)明實施例第六方面提供一種客戶端,包括:至少一個處理器,以及與所述至少一個處理器通信連接的存儲器、通信接口;其中,所述存儲器存儲有可被所述至少一個處理器執(zhí)行的指令,所述至少一個處理器通過執(zhí)行所述存儲器存儲的指令,利用所述通信接口執(zhí)行本發(fā)明實施例第二方面提供的所述數(shù)據(jù)傳輸?shù)姆椒ā?/p>
本發(fā)明實施例第七方面提供一種服務端,包括:至少一個處理器,以及與所述至少一個處理器通信連接的存儲器、通信接口;其中,所述存儲器存儲有可被所述至少一個處理器執(zhí)行的指令,所述至少一個處理器通過執(zhí)行所述存儲器存儲的指令,利用所述通信接口執(zhí)行本發(fā)明實施例第三方面提供的所述數(shù)據(jù)傳輸?shù)姆椒ā?/p>
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域的普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為現(xiàn)有技術中客戶端與服務端協(xié)商序列化方式的方法流程圖;
圖2為本發(fā)明實施例提供的一種數(shù)據(jù)傳輸系統(tǒng)的示意圖;
圖3為本發(fā)明實施例提供的一種數(shù)據(jù)傳輸方法的流程圖;
圖4為本發(fā)明實施例提供的一種數(shù)據(jù)傳輸方法的流程圖;
圖5為本發(fā)明實施例提供的一種數(shù)據(jù)傳輸裝置的結構示意圖;
圖6為本發(fā)明實施例提供的一種數(shù)據(jù)傳輸裝置的結構示意圖;
圖7為本發(fā)明實施例提供的一種客戶端的結構示意圖;
圖8為本發(fā)明實施例提供的一種服務端的結構示意圖。
具體實施方式
下面通過附圖以及具體實施例對本發(fā)明技術方案做詳細的說明,應當理解本發(fā)明實施例以及實施例中的具體特征是對本發(fā)明技術方案的詳細的說明,而不是對本發(fā)明技術方案的限定,在不沖突的情況下,本發(fā)明實施例以及實施例中的技術特征可以相互組合。
需要理解的是,在本發(fā)明實施例的描述中,“第一”、“第二”等詞匯,僅用于區(qū)分描述的目的,而不能理解為指示或暗示相對重要性,也不能理解為指示或暗示順序。在本發(fā)明實施例的描述中“多個”,是指兩個或兩個以上。
本發(fā)明實施例中的術語“和/或”,僅僅是一種描述關聯(lián)對象的關聯(lián)關系,表示可以存在三種關系,例如,a和/或b,可以表示:單獨存在a,同時存在a和b,單獨存在b這三種情況。另外,本文中字符“/”,一般表示前后關聯(lián)對象是一種“或”的關系。
目前,客戶端及服務端能夠支持的報文序列化的方式較多,不同的客戶端及服務端支持的序列化方式可能不同,但客戶端與服務端需要采用同一序列化方式對數(shù)據(jù)進行封裝和解析才能成功完成數(shù)據(jù)交互。為了實現(xiàn)序列化方式的統(tǒng)一,現(xiàn)有技術采用的技術方案通常為:在客戶端與服務器建立傳輸控制協(xié)議(transmissioncontrolprotocol,tcp)連接后、客戶端與服務端發(fā)起數(shù)據(jù)交互前,先進行一次報文交互,以協(xié)商出一種雙方都支持的報文序列化方式,并在后續(xù)進行數(shù)據(jù)交互時使用協(xié)商出的序列化方式進行數(shù)據(jù)交互。
圖1為現(xiàn)有技術協(xié)商序列化方式的具體實現(xiàn)過程,具體包括:
步驟101,客戶端與服務端在建立起tcp連接后,客戶端發(fā)送一個http請求給服務端,請求頭中accept字段攜帶有客戶端支持的序列化方式列表。
步驟102,服務端接收到所述http請求后,讀取accept字段得到客戶端支持的序列化方式列表;
步驟103,服務端將客戶端支持的序列化方式與服務端支持的序列化方式進行比對,選取一個或多個雙方支持的序列化方式。
步驟104,服務端返回一個http響應給客戶端,響應頭中accept字段攜帶選取的序列化方式。
步驟105,客戶端收到服務端發(fā)回的響應后獲知協(xié)商的序列化方式,并在后續(xù)與服務端的數(shù)據(jù)交換過程采用協(xié)商的序列化方式中的某一個。
在上述這種通過協(xié)商實現(xiàn)序列化方式統(tǒng)一的方法中,服務端與客戶端必須要在正式數(shù)據(jù)交互前進行一次報文交互,即執(zhí)行上述步驟101至步驟105。這種方式大大增加了網(wǎng)絡的負載,特別是在多用戶高并發(fā)訪問場景下,嚴重影響到客戶端與服務端數(shù)據(jù)交互的效率。
實施例一
本發(fā)明實施例一提供一種數(shù)據(jù)傳輸方法,用于解決現(xiàn)有技術存在所述客戶端與所述服務端需要在數(shù)據(jù)交互前協(xié)商報文序列化方式,導致網(wǎng)絡復負載量大的技術問題。
在介紹傳所述數(shù)據(jù)傳輸方法前,先介紹實施所述數(shù)據(jù)傳輸方法的數(shù)據(jù)傳輸系統(tǒng),所述系統(tǒng)可以包括多個服務端與多個客戶端,任意一個客戶端與任意一個服務端之間可通過網(wǎng)絡連接通信。例如,參照圖2所示,所述系統(tǒng)包括客戶端21、客戶端22、客戶端23、服務端23、服務端25及服務端26,客戶端21、客戶端22、客戶端23與服務端23、服務端25、服務端26之間可通過網(wǎng)絡實現(xiàn)相互連接和通信,其中服務端23、服務端25、服務端26均能支持本領域常用的序列化方式,所述服務端支持的序列化方式包括但不限于以下:js對象標記(javascriptobjectnotation,json)、可擴展標記語言(extensiblemarkuplanguage,xml)、遠程過程調(diào)用協(xié)議(remoteprocedurecallprotocol,rpc)、海森(hessian)、burlap、actionmessageformat等。
本發(fā)明實施例提供數(shù)據(jù)傳輸方法能夠適用于所述系統(tǒng)中任一服務端與任一客戶端之間進行數(shù)據(jù)交互,且在執(zhí)行本發(fā)明實施例傳輸數(shù)據(jù)的方法前,進行數(shù)據(jù)交互的客戶端與服務端已建立tcp連接。接下來以客戶端21與服務端24進行數(shù)據(jù)交互為例,對本發(fā)明實施例提供的數(shù)據(jù)傳輸方法進行詳細說明。
參照圖3,本發(fā)明實施例一提供數(shù)據(jù)傳輸方法包括:
步驟301,客戶端21以第一序列化方式對請求數(shù)據(jù)進行序列化處理,獲得序列化的請求數(shù)據(jù)。
具體的,客戶端21至少支持一種序列化方式,客戶端21支持的序列化方式包括但不限于以下幾種:json、xml、rpc、hessian、burlap、actionmessageformat,所述第一序列化方式可以為客戶端21支持的序列化方式中的任一序列化方式。
步驟302,客戶端21生成第一http請求報文,所述第一http請求報文攜帶所述序列化的請求數(shù)據(jù)以及表征所述第一序列化方式的標識。
具體的,客戶端21可將所述序列化的請求數(shù)據(jù)封裝在所述第一http請求報文的正文中,并在所述第一http請求報文的預設字段上承載表征客戶端21對請求數(shù)據(jù)進行序列化的第一序列化方式的標識。
其中,所述預設字段可以位于所述第一http請求報文的請求行中,也可以位于所述第一http請求報文的請求頭中,還可以位于所述第一http請求報文的請求正文中,本發(fā)明實施例對此不做具體限制。例如,可以指定所述第一http請求報文的請求頭中的“accept-encoding”字段為所述預設字段。
步驟303,客戶端21將所述第一http請求報文發(fā)送給服務端24。
步驟304,服務端24接收客戶端21發(fā)送的第一http請求報文,并判斷服務端24是否支持所述標識表征的所述第一序列化方式。
具體的,服務端24在接收到客戶端21發(fā)送的第一http請求報文后,從所述第一http請求報文中所述預設字段上獲取所述標識,進而獲知客戶端21生成所述第一http請求報文時的序列化方式,即第一序列化方式;然后將所述第一序列化方式與服務端24支持的序列化方式進行匹配。
如果服務端24支持所述第一序列化方式,則執(zhí)行步驟305:
步驟305,服務端24根據(jù)所述第一序列化方式從所述第一http請求報文中獲得所述請求數(shù)據(jù)。
具體的,在服務端24確定服務端24支持所述第一序列化方式之后,服務端24使用所述第一序列化方式對應的反序列化方式對所述第一http請求報文進行反序列化處理,從而獲得所述請求數(shù)據(jù)。
在上述方案中,客戶端21與服務端24可以不需要在數(shù)據(jù)交互前協(xié)商報文序列化方式,而是客戶端21直接向服務端24發(fā)送承載著請求數(shù)據(jù)的請求報文,并將表征客戶端21對請求數(shù)據(jù)進行序列化處理的序列化方式的標識增加在請求報文的預設字段中;當服務端24接收到客戶端21發(fā)送的請求報文時,可通過識別請求報文預設字段上的標識確定客戶端21的序列化方式,并在服務端24支持該序列化方式時對請求報文進行反序列化處理,從而獲得客戶端21發(fā)送的請求數(shù)據(jù)。由于本方案中的服務端24能夠支持本領域常用的序列化方式,所以對于大多數(shù)客戶端21發(fā)送的請求報文,服務端24都能夠進行反序列化處理從而得到請求數(shù)據(jù),即針對大部分的數(shù)據(jù)交互都可以不進行交互前的報文序列化方式的協(xié)商過程,解決了客戶端21與服務端24需要在數(shù)據(jù)交互前協(xié)商報文序列化方式導致的網(wǎng)絡復負載量大的技術問題,提高了客戶端21與服務端24的數(shù)據(jù)交互效率。
不僅如此,由于本方案中的服務端24能夠支持本領域常用的序列化方式,所以可以不需要針對客戶端21開發(fā)多種報文序列化方式去對接不同的服務端24,節(jié)約了服務端24的開發(fā)成本。
可選的,參照圖3,在步驟305之后,所述方法還包括:
步驟306:服務端24根據(jù)所述請求數(shù)據(jù)及所述第一序列化方式生成第一http響應報文。
具體的,服務端24對所述請求數(shù)據(jù)進行處理,得到響應數(shù)據(jù);服務端24以所述第一序列化方式對所述響應數(shù)據(jù)進行序列化處理,獲得序列化的響應數(shù)據(jù);客戶端21將所述序列化的響應數(shù)據(jù)封裝在所述第一http響應報文的正文中,并在所述第一http響應報文的狀態(tài)行中承載表征服務端24已成功響應客戶端21請求的狀態(tài)碼,以使得客戶端21在接收到所述第一http響應報文時能夠獲知數(shù)據(jù)請求成功。
步驟307:服務端24將所述第一http響應報文發(fā)送給客戶端21。
步驟308:客戶端21接收服務端24發(fā)送的所述第一http響應報文,并根據(jù)所述第一序列化方式從所述第一http響應報文中獲得所述響應數(shù)據(jù)。
具體的,客戶端21在接收到所述第一http響應報文發(fā)送給客戶端21后,通過所述第一http響應報文的狀態(tài)行中狀態(tài)碼獲知服務端24已成功響應客戶端21請求,然后使用所述第一序列化方式對應的反序列化方式對所述第一http響應報文進行反序列化處理,得到所述響應數(shù)據(jù)。
當然,在具體實施過程中,還可能出現(xiàn)除了服務端24不支持客戶端21對請求數(shù)據(jù)進行序列化的序列化方式的原因外的其他原因所導致的數(shù)據(jù)請求失敗的情況,例如服務端24找不到客戶端21請求的資源而導致服務端24無法返回對應響應數(shù)據(jù)的情況,在這種情況下服務端仍然可以返回響應報文,但該報文中沒有攜帶請求數(shù)據(jù)對應的響應數(shù)據(jù),該響應報文可用于告知用戶數(shù)據(jù)請求失敗、數(shù)據(jù)請求失敗的具體原因等。由于此部分內(nèi)容為本領域技術人員所熟知,因此本發(fā)明實施例就不再進行贅述。
通過本方式,服務端24在支持客戶端21對請求數(shù)據(jù)進行序列化的序列化方式時,可采用該序列化方式對客戶端21進行響應,進一步完善了客戶端21與服務端24之間進行數(shù)據(jù)傳輸?shù)姆桨浮?/p>
可選的,所述表征所述第一序列化方式的標識位于所述第一http請求報文的請求行中的統(tǒng)一資源定位符(uniformresourcelocator,url)中。其中,所述標識在所述url中的形式包括但不限于以下兩種:
第1種,所述標識以后綴的形式位于所述第一http請求報文的請求行中的url中。
例如,所述第一序列化方式為xml,所述第一http請求報文的請求行可以為:post/http://www.xxx.com/arg1/arg2.xmlhttp/1.1(crlf)。其中,“http://www.xxx.com/arg1/arg2”為url,“.xml”為表征所述第一序列化方式的標識,“post”為請求方法,“http/1.1”為請求使用的協(xié)議以及協(xié)議版本。
當然,在具體實施過程中所述第一http請求報文攜帶的請求方法、url、請求使用的協(xié)議以及協(xié)議版本還可以有其他可能取值,上述舉例僅用于說明所述標識以后綴的形式位于url中,不能用來限定請求方法、url、請求使用的協(xié)議以及協(xié)議版本。
第2種,所述標識以路徑參數(shù)的形式位于所述第一http請求報文的請求行中的url中。
例如,所述第一序列化方式為xml,所述第一http請求報文的請求行可以為:post/http://www.xxx.com/arg1/arg2/xml/http/1.1(crlf)。其中,“http://www.xxx.com/arg1/arg2”為url,“/xml/”為表征所述第一序列化方式的標識,“post”為請求方法,“http/1.1”為請求使用的協(xié)議以及協(xié)議版本。
當然,在具體實施過程中所述第一http請求報文攜帶的請求方法、url、請求使用的協(xié)議以及協(xié)議版本還可以有其他可能取值,上述舉例僅用于說明所述標識以路徑參數(shù)的形式位于url中,不能用來限定請求方法、url、請求使用的協(xié)議以及協(xié)議版本。
現(xiàn)有技術在報文中攜帶的序列化標識都是在報文頭的“accept-encoding”字段上,至少需要20個字節(jié)(例如“accept-encoding:xxx\n”),而本方式通過在url上承載序列化標識,相對于現(xiàn)有技術至少節(jié)約了15字節(jié)。所以通過本方式可以減小報文的大小,進一步減輕網(wǎng)絡負載,提高客戶端21與服務端24的數(shù)據(jù)交互的效率。
當然,本發(fā)明實施例在具體實施過程中,在極少數(shù)情況下可能會出現(xiàn)服務端24不支持所述第一序列化方式的情況,接下來介紹在服務端24不支持所述第一序列化方式時本發(fā)明實施例的解決方案。
可選的,在上述步驟304所述的判斷服務端24是否支持所述標識表征的所述第一序列化方式之后,如果服務端24不支持所述第一序列化方式,則服務端24可以將其支持的序列化方式反饋給客戶端21,讓客戶端21從服務端24反饋的序列化方式中選擇出客戶端21與服務端24共同支持的序列化方式再次發(fā)起數(shù)據(jù)交互。參照圖4,所述方法具體實現(xiàn)過程包括步驟309至步驟321:
步驟309:服務端24確定服務端24支持的至少一種序列化方式。
在具體實施過程中,服務端24獲取服務端24支持的至少一種序列化方式可以是服務端24支持的所有序列化方式,也可以是服務端24支持的所有序列化方式中的部分序列化方式,本發(fā)明實施例對此不做具體限制。
步驟310:服務端24生成第二http響應報文,所述第二http響應報文攜帶表征所述至少一種序列化方式的標識。
具體的,服務端24將表征所述至少一種序列化方式的標識封裝在所述第二http響應報文中,所述至少一種序列化方式的標識可以位于所述第二http響應報文的狀態(tài)行中,也可以位于所述第二http響應報文的響應頭中,本發(fā)明實施例對此不做具體限制。所述第二http響應報文的狀態(tài)行中還承載著表征服務端24已未能成功響應客戶端21請求的狀態(tài)碼,以使得客戶端21在接收到所述第二http響應報文時,能夠根據(jù)所述狀態(tài)碼獲知服務端24不支持所述第一序列化方式因而導致服務端24未能成功響應客戶端21的請求,以及所述第二http響應報文攜帶有表征服務端24支持的至少一種序列化方式的標識。
步驟311:服務端24將所述第二http響應報文發(fā)送給客戶端21。
步驟312:客戶端21接收服務端24發(fā)送的所述第二http響應報文,并從所述第二http響應報文中獲知服務端24支持的所述至少一種序列化方式。
具體的,客戶端21在接收到所述第二http響應報文發(fā)送給客戶端21后,通過所述第二http響應報文的狀態(tài)行中狀態(tài)碼獲知服務端24未能成功響應客戶端21請求,并從所述第二http響應報文中獲得表征服務端24支持的至少一種序列化方式的標識,進而獲知服務端24支持的所述至少一種序列化方式。
步驟313:客戶端21將所述至少一種序列化方式與客戶端21支持的序列化方式進行匹配,確定出客戶端21及服務端24共同支持的序列化方式。
在具體實施過程中,如果客戶端21能夠支持多種序列化方式,且在客戶端21支持的除所述第一序列化方式外的其他序列化方式中,存在與所述服務反饋的序列化方式相同的序列化方式,客戶端21就將這部分相同的序列化方式確定為客戶端21及服務端24共同支持的序列化方式;如果客戶端21僅支持所述第一序列化方式,或者客戶端21支持多種序列化方式但在客戶端21支持的除所述第一序列化方式外的其他序列化方式中不存在與所述服務反饋的序列化方式相同的序列化方式,那么客戶端21就告知用戶從所述服務反饋的序列化方式中選擇出至少一種序列化方式對客戶端21進行開發(fā),進而使得客戶端21存在與服務端24共同支持的序列化方式,并將選擇出的至少一種序列化方式確定為客戶端21及服務端24共同支持的序列化方式。
步驟314:客戶端21以第二序列化方式對所述請求數(shù)據(jù)進行序列化處理,獲得序列化的請求數(shù)據(jù),其中所述第二序列化方式為客戶端21及服務端24共同支持的序列化方式中的任一序列化方式。
步驟315:客戶端21生成第二http請求報文,所述第二http請求報文攜帶所述序列化的請求數(shù)據(jù)以及表征所述第二序列化方式的標識。
步驟316:客戶端21將所述第二http請求報文發(fā)送給服務端24。
步驟317:服務端24接收客戶端21發(fā)送的所述第二http請求報文,從所述第二http請求報文獲取所述表征所述第二序列化方式的標識,并判斷服務端24是否支持所述標識表征的所述第二序列化方式,如果服務端24支持所述第二序列化方式,則執(zhí)行步驟318:
步驟318:服務端24根據(jù)所述第二序列化方式從所述第二http請求報文中獲得所述請求數(shù)據(jù)。
在具體實施過程中,在上述步驟317中,服務端24在接收客戶端21發(fā)送的所述第二http請求報文之后,可以不用執(zhí)行判斷服務端24是否支持所述標識表征的所述第二序列化方式的步驟,而直接執(zhí)行步驟318。服務端24是否執(zhí)行所述判斷服務端24是否支持所述標識表征的所述第二序列化方式的步驟,可以根據(jù)實際需要進行選擇,本發(fā)明實施例不做具體限制。
步驟319:服務端24根據(jù)所述請求數(shù)據(jù)及所述第二序列化方式生成第三http響應報文。
步驟320:服務端24將所述第三http響應報文發(fā)送給客戶端21。
步驟321:客戶端21接收服務端24發(fā)送的所述第三http響應報文,并根據(jù)所述第二序列化方式從所述第三http響應報文中獲得所述響應數(shù)據(jù)。
上述步驟314至321的具體實現(xiàn)方式可參照上述步驟301至308,本發(fā)明實施例不再進行贅述。
在本方式中,服務端24在收到客戶端21的請求報文之后,如果服務端24不支持客戶端21發(fā)送的請求報文的序列化方式,服務端24就將服務端24支持的至少一種序列化方式返回給客戶端21,然后客戶端21從服務端24支持的至少一種序列化方式中選擇出客戶端21與服務端24共同支持的序列化方式再次發(fā)起數(shù)據(jù)交互。通過本方式,可以在減輕網(wǎng)絡負載的同時保證數(shù)據(jù)交互的成功率,進一步完善了客戶端21與服務端24之間進行數(shù)據(jù)傳輸?shù)姆桨浮?/p>
實施例二
本發(fā)明實施例二提供一種數(shù)據(jù)傳輸方法,應用于上述實施例一中進行數(shù)據(jù)傳輸?shù)目蛻舳?,所述方法包括?/p>
所述客戶端以第一序列化方式對請求數(shù)據(jù)進行序列化處理,獲得序列化的請求數(shù)據(jù);
所述客戶端生成第一http請求報文,所述第一http請求報文攜帶所述序列化的請求數(shù)據(jù)以及表征所述第一序列化方式的標識;
所述客戶端將所述第一http請求報文發(fā)送給服務端。
可選的,所述表征所述第一序列化方式的標識位于所述第一http請求報文的請求行中,或者位于所述第一http請求報文的請求頭中,或者位于所述第一http請求報文的請求正文中。
可選的,所述表征所述第一序列化方式的標識以后綴的形式或以路徑參數(shù)的形式位于所述第一http請求報文的請求行中的url中。
可選的,在所述客戶端將所述第一http請求報文發(fā)送給服務端之后,所述方法還包括:
所述客戶端接收所述服務端返回的響應報文,根據(jù)所述響應報文的狀態(tài)行中的狀態(tài)碼確定所述響應報文攜帶序列化的響應數(shù)據(jù);
所述客戶端根據(jù)所述第一序列化方式從所述響應報文中獲得響應數(shù)據(jù)。
可選的,在所述客戶端將所述第一http請求報文發(fā)送給服務端之后,所述方法還包括:
所述客戶端接收所述服務端發(fā)送的響應報文,根據(jù)所述響應報文的狀態(tài)行中的狀態(tài)碼確定所述響應報文攜帶表征所述服務端支持的至少一種序列化方式的標識;
所述客戶端從所述響應報文中獲知所述服務端支持的至少一種序列化方式;所述客戶端確定所述客戶端及所述服務端共同支持的序列化方式;
所述客戶端以第二序列化方式對所述請求數(shù)據(jù)進行序列化處理,獲得序列化的請求數(shù)據(jù),其中所述第二序列化方式為所述客戶端及所述服務端共同支持的序列化方式中的任一序列化方式;
所述客戶端生成第二http請求報文,所述第二http請求報文攜帶所述序列化的請求數(shù)據(jù)以及表征所述第二序列化方式的標識;
所述客戶端將所述第二http請求報文發(fā)送給所述服務端。
實施例三
本發(fā)明實施例三提供一種數(shù)據(jù)傳輸方法,應用于上述實施例一中進行數(shù)據(jù)傳輸?shù)姆斩耍龇椒òǎ?/p>
所述服務端接收客戶端發(fā)送的第一http請求報文,所述第一http請求報文攜帶序列化的請求數(shù)據(jù)以及表征所述客戶端對請求數(shù)據(jù)進行序列化處理的第一序列化方式的標識;
所述服務端從所述第一http請求報文中獲得所述標識,判斷所述服務端是否支持所述標識表征的所述第一序列化方式;
如果所述服務端支持所述第一序列化方式,則所述服務端根據(jù)所述第一序列化方式從所述第一http請求報文中獲得所述請求數(shù)據(jù)。
可選的,所述表征所述第一序列化方式的標識位于所述第一http請求報文的請求行中,或者位于所述第一http請求報文的請求頭中,或者位于所述第一http請求報文的請求正文中。
可選的,所述表征所述第一序列化方式的標識以后綴的形式或以路徑參數(shù)的形式位于所述第一http請求報文的請求行中的url中。
可選的,在所述服務端獲得所述請求數(shù)據(jù)之后,所述方法還包括:
所述服務端對所述請求數(shù)據(jù)進行處理,得到響應數(shù)據(jù);所述服務端以所述第一序列化方式對所述響應數(shù)據(jù)進行序列化處理,獲得序列化的響應數(shù)據(jù);
所述服務端生成第一http響應報文,所述第一http響應報文攜帶所述序列化的響應數(shù)據(jù);
所述服務端將所述第一http響應報文發(fā)送給所述客戶端。
可選的,在所述服務端判斷所述服務端是否支持所述第一序列化方式之后,所述方法還包括:
如果所述服務端不支持所述第一序列化方式,則所述服務端確定所述服務端支持的至少一種序列化方式;
所述服務端生成第二http響應報文,所述第二http響應報文攜帶表征所述服務端支持的至少一種序列化方式的標識;
所述服務端將所述第二http響應報文發(fā)送給所述客戶端。
實施例四
本發(fā)明實施例四提供一種數(shù)據(jù)傳輸裝置,用于實施上述實施例二提供的所述數(shù)據(jù)傳輸方法。參照圖5,所述數(shù)據(jù)傳輸裝置包括:
處理單元401,用于:以第一序列化方式對請求數(shù)據(jù)進行序列化處理,獲得序列化的請求數(shù)據(jù);生成第一http請求報文,所述第一http請求報文攜帶所述序列化的請求數(shù)據(jù)以及表征所述第一序列化方式的標識;
發(fā)送單元402,用于:將所述第一http請求報文發(fā)送給服務端。
可選的,所述裝置還包括:
接收單元403,用于:在所述發(fā)送單元402將所述第一http請求報文發(fā)送給所述服務端之后,接收所述服務端返回的響應報文;
所述處理單元401還用于:根據(jù)所述響應報文的狀態(tài)行中的狀態(tài)碼確定所述響應報文攜帶序列化的響應數(shù)據(jù);根據(jù)所述第一序列化方式從所述響應報文中獲得響應數(shù)據(jù)。
可選的,所述裝置還包括:
接收單元403,用于:在所述發(fā)送單元402將所述第一http請求報文發(fā)送給所述服務端之后,接收所述服務端發(fā)送的響應報文;
所述處理單元401還用于:根據(jù)所述響應報文的狀態(tài)行中的狀態(tài)碼確定所述響應報文攜帶表征所述服務端支持的至少一種序列化方式的標識;從所述響應報文中獲知所述服務端支持的至少一種序列化方式;確定所述裝置及所述服務端共同支持的序列化方式;以第二序列化方式對所述請求數(shù)據(jù)進行序列化處理,獲得序列化的請求數(shù)據(jù),其中所述第二序列化方式為所述裝置及所述服務端共同支持的序列化方式中的任一序列化方式;生成第二http請求報文,所述第二http請求報文攜帶所述序列化的請求數(shù)據(jù)以及表征所述第二序列化方式的標識;
所述發(fā)送單元402還用于:將所述第二http請求報文發(fā)送給所述服務端。
可選的,所述表征所述第一序列化方式的標識位于所述第一http請求報文的請求行中,或者位于所述第一http請求報文的請求頭中,或者位于所述第一http請求報文的請求正文中。
可選的,所述表征所述第一序列化方式的標識以后綴的形式或以路徑參數(shù)的形式位于所述第一http請求報文的請求行中的url中。
以上各個單元所執(zhí)行操作的具體實現(xiàn)方式可以參照上述實施例二中由客戶端執(zhí)行的各對應步驟的具體實現(xiàn)方式,本發(fā)明實施例不再贅述。
實施例五
本發(fā)明實施例五提供一種數(shù)據(jù)傳輸裝置,用于實施上述實施例三提供的所述數(shù)據(jù)傳輸方法。參照圖6,所述數(shù)據(jù)傳輸裝置包括:
接收單元501,用于:接收客戶端發(fā)送的第一http請求報文,所述第一http請求報文攜帶序列化的請求數(shù)據(jù)以及表征所述客戶端對請求數(shù)據(jù)進行序列化處理的第一序列化方式的標識;
處理單元502,用于:從所述第一http請求報文中獲得所述標識,判斷所述裝置是否支持所述標識表征的所述第一序列化方式;在所述裝置支持所述第一序列化方式時,根據(jù)所述第一序列化方式從所述第一http請求報文中獲得所述請求數(shù)據(jù)。
可選的,所述處理單元502還用于:對所述請求數(shù)據(jù)進行處理,得到響應數(shù)據(jù);以所述第一序列化方式對所述響應數(shù)據(jù)進行序列化處理,獲得序列化的響應數(shù)據(jù);生成第一http響應報文,所述第一http響應報文攜帶所述序列化的響應數(shù)據(jù);
所述裝置還包括發(fā)送單元503,用于:將所述第一http響應報文發(fā)送給所述客戶端。
可選的,所述處理單元502還用于:在所述裝置不支持所述第一序列化方式時,確定所述裝置支持的至少一種序列化方式;生成第二http響應報文,所述第二http響應報文攜帶表征所述裝置支持的至少一種序列化方式的標識;
所述裝置還包括發(fā)送單元503,用于:將所述第二http響應報文發(fā)送給所述客戶端。
可選的,所述表征所述第一序列化方式的標識位于所述第一http請求報文的請求行中,或者位于所述第一http請求報文的請求頭中,或者位于所述第一http請求報文的請求正文中。
可選的,所述表征所述第一序列化方式的標識以后綴的形式或以路徑參數(shù)的形式位于所述第一http請求報文的請求行中的url中。
以上各個單元所執(zhí)行操作的具體實現(xiàn)方式可以參照上述實施例三中由服務端執(zhí)行的各對應步驟的具體實現(xiàn)方式,本發(fā)明實施例不再贅述。
實施例六
本發(fā)明實施例六提供一種客戶端,參照圖7,所述客戶端包括:
至少一個處理器601;以及,
與所述至少一個處理器通信連接的存儲器602、通信接口603;其中,
所述存儲器602存儲有可被所述至少一個處理器601執(zhí)行的指令,所述至少一個處理器601通過執(zhí)行所述存儲器602存儲的指令,利用所述通信接口603執(zhí)行上述實施例二提供的所述數(shù)據(jù)傳輸?shù)姆椒ā?/p>
實施例七
本發(fā)明實施例七提供一種服務端,參照圖8,所述服務端包括:
至少一個處理器701;以及,
與所述至少一個處理器通信連接的存儲器702、通信接口703;其中,
所述存儲器702存儲有可被所述至少一個處理器701執(zhí)行的指令,所述至少一個處理器701通過執(zhí)行所述存儲器702存儲的指令,利用所述通信接口703執(zhí)行上述實施例三提供的所述數(shù)據(jù)傳輸?shù)姆椒ā?/p>
本發(fā)明實施例中提供的一個或多個技術方案,至少具有如下技術效果或優(yōu)點:
1、對于大多數(shù)客戶端發(fā)送的請求報文,服務端都能夠進行反序列化處理從而得到請求數(shù)據(jù),所以針對大部分的數(shù)據(jù)交互都不再需要進行交互前的報文序列化方式的協(xié)商過程,解決了客戶端與服務端需要在數(shù)據(jù)交互前協(xié)商報文序列化方式導致的網(wǎng)絡復負載量大的技術問題,提高了客戶端與服務端的數(shù)據(jù)交互效率。
2、對于極少數(shù)客戶端發(fā)送的請求報文,服務端如果不支持客戶端發(fā)送的請求報文的序列化方式,服務端就將服務端支持的至少一種序列化方式返回給客戶端,然后客戶端從服務端支持的至少一種序列化方式中選擇出客戶端與服務端共同支持的序列化方式再次發(fā)起數(shù)據(jù)交互,因此本發(fā)明實施例在減輕網(wǎng)絡負載的同時保證了數(shù)據(jù)交互的成功率。
3、由于本發(fā)明實施例中的服務端能夠支持本領域常用的序列化方式,因此本發(fā)明實施例可以不需要針對客戶端開發(fā)多種報文序列化方式去對接不同的服務端,節(jié)約了服務端的開發(fā)成本。
本領域內(nèi)的技術人員應明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
顯然,本領域的技術人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權利要求及其等同技術的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。