專利名稱:一種Web客戶端與服務器的數(shù)據(jù)同步方法和系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及網絡信息傳輸技術領域,更為具體地,涉及一種基于服務器推送的Web客戶端緩存同步方法和裝置。
背景技術:
B/S (BiOwser/Server,瀏覽器/服務器)架構以其高可伸縮性,實施、管理和使用的簡單方便成為網絡應用的主流,基于B/S架構的WEB客戶端數(shù)據(jù)緩存技術則是提升應用性能的最有效的方式之一,所謂WEB客戶端數(shù)據(jù)緩存,即將頻繁訪問的基礎數(shù)據(jù)緩存到客戶端本地,使用時直接訪問本地緩存中的數(shù)據(jù),不從服務器端獲取。實踐證明,這種客戶端緩存的工作模式可以大大的降低服務器和網絡的負載、減小數(shù)據(jù)的加載延遲、提升了系統(tǒng) 響應速度。在高并發(fā)情況下,效果更加明顯。緩存方案中核心問題就是確保客戶端與服務端的數(shù)據(jù)一致性,在服務器數(shù)據(jù)更新情況下,客戶端訪問到的應是即時數(shù)據(jù)而不是過時數(shù)據(jù),好的緩存同步方案不但能保證數(shù)據(jù)一致性,還要盡可能降低同步時間,減少服務器壓力。常見緩存同步方案一般采用Ajax輪詢技術,Ajax是一種異步請求技術,可以向服務器發(fā)出請求并處理響應,而不阻塞用戶。Ajax輪詢是指客戶端首先向服務器發(fā)起數(shù)據(jù)同步請求,在收到應用服務器的響應數(shù)據(jù)后客戶端響應函數(shù)馬上處理數(shù)據(jù),同時再次發(fā)出新的同步請求重新建立連接,直到所有數(shù)據(jù)同步完成。Ajax輪詢的優(yōu)點就是在不刷新整個頁面前提下同步數(shù)據(jù),使得WEB應用程序更加迅捷的響應用戶交互,缺點是頻繁的交互增加了建立和關閉網絡連接的頻率,增加網絡延時和服務器的負載壓力。
發(fā)明內容
鑒于上述問題,本發(fā)明的目的是提供一種Web客戶端與服務器的數(shù)據(jù)同步方法和系統(tǒng),通過服務器對同步數(shù)據(jù)的主動推送,以避免了客戶端和服務器的頻繁交互,降低網絡延時和服務器的負載壓力。根據(jù)本發(fā)明的一個方面,提供了一種Web客戶端與服務器的數(shù)據(jù)同步方法,包括服務器在基礎數(shù)據(jù)表中的基礎數(shù)據(jù)發(fā)生變動時將所述變動內容生成變動記錄同步保存至變動日志表中;服務器根據(jù)Web客戶端的同步請求從所述變動日志表中查詢所述變動記錄,在服務器與所述Web客戶端的持續(xù)連接狀態(tài)下分批將所述變動記錄傳輸至所述Web客戶端;其中,所述Web客戶端的同步請求包括最近一次同步時間戳和需要同步的基礎數(shù)據(jù)范圍;所述服務器根據(jù)所述同步請求查詢所述同步時間戳后發(fā)生的且屬于所述基礎數(shù)據(jù)范圍的變動記錄。其中,優(yōu)選的方案是,在基礎數(shù)據(jù)表中的基礎數(shù)據(jù)發(fā)生變動時,所述服務器將所述變動內容以Sql語句的形式、XML格式的形式、或Json格式的形式生成變動記錄同步保存至所述變動日志表中。根據(jù)本發(fā)明的另一方面,提供了一種Web客戶端數(shù)據(jù)同步推送服務器,包括同步觸發(fā)器,用于在基礎數(shù)據(jù)表中的基礎數(shù)據(jù)發(fā)生變動時將所述變動內容生成變動記錄同步保存至變動日志表中;變動日志表,用于保存通過所述同步觸發(fā)器同步的基礎數(shù)據(jù)表的變動記錄;同步請求響應單元,用于根據(jù)Web客戶端的同步請求從所述變動日志表中查詢所述變動記錄,在與所述Web客戶端的持續(xù)連接狀態(tài)下分批將所述變動記錄傳輸至所述Web客戶端;其中,所述同步請求響應單元根據(jù)所述Web客戶端需要同步的基礎數(shù)據(jù)范圍查詢所述Web客戶端最近一次同步時間戳后發(fā)生的變動記錄。 根據(jù)本發(fā)明的再一方面,還提供一種包括Web客戶端和前述的服務器的Web客戶端與服務器的數(shù)據(jù)同步系統(tǒng)。利用上述根據(jù)本發(fā)明Web客戶端與服務器的數(shù)據(jù)同步方法和裝置,能夠為WEB客戶端緩存提供基于“服務器推送”機制的高效同步方案,更加充分地利用服務器的計算能力和存儲能力,減小網絡傳輸與交互壓力,提升應用的響應速度和用戶體驗。為了實現(xiàn)上述以及相關目的,本發(fā)明的一個或多個方面包括后面將詳細說明并在權利要求中特別指出的特征。下面的說明以及附圖詳細說明了本發(fā)明的某些示例性方面。然而,這些方面指示的僅僅是可使用本發(fā)明的原理的各種方式中的一些方式。此外,本發(fā)明旨在包括所有這些方面以及它們的等同物。
通過參考以下結合附圖的說明及權利要求書的內容,并且隨著對本發(fā)明的更全面理解,本發(fā)明的其它目的及結果將更加明白及易于理解。在附圖中圖I為根據(jù)本發(fā)明的Web客戶端與服務器的數(shù)據(jù)同步方法的流程圖;圖2為根據(jù)本發(fā)明實施例的同步數(shù)據(jù)在服務器端以及客戶端-服務器的數(shù)據(jù)同步過程示意圖;圖3為根據(jù)本發(fā)明實施例的客戶端數(shù)據(jù)同步的數(shù)據(jù)處理方法示意圖;圖4為根據(jù)本發(fā)明實施例的Web客戶端數(shù)據(jù)同步推送服務器的方框示意圖。在所有附圖中相同的標號指示相似或相應的特征或功能。
具體實施例方式在下面的描述中,出于說明的目的,為了提供對一個或多個實施例的全面理解,闡述了許多具體細節(jié)。然而,很明顯,也可以在沒有這些具體細節(jié)的情況下實現(xiàn)這些實施例。在其它例子中,為了便于描述一個或多個實施例,公知的結構和設備以方框圖的形式示出。以下將結合附圖對本發(fā)明的具體實施例進行詳細描述。圖I示出了根據(jù)本發(fā)明實施例的Web客戶端與服務器的數(shù)據(jù)同步方法的流程圖。如圖I所示,本發(fā)明提供的Web客戶端與服務器的數(shù)據(jù)同步方法包括如下步驟SllO :服務器在基礎數(shù)據(jù)表中的基礎數(shù)據(jù)發(fā)生變動時將變動內容生成變動記錄同步保存至變動日志表中;
S120 :服務器根據(jù)Web客戶端的同步請求從變動日志表中查詢上述變動記錄,在服務器與Web客戶端保持持續(xù)連接狀態(tài)下分批將所查詢到的變動記錄傳輸至所述Web客戶端。其中,Web客戶端的同步請求包括最近一次同步時間戳和需要同步的基礎數(shù)據(jù)范圍,以便服務器根據(jù)該同步請求查詢Web客戶端在最近一次同步時間戳后發(fā)生的且屬于基礎數(shù)據(jù)范圍的變動記錄。通過上述流程可以看出,本發(fā)明提供的Web客戶端與服務器的數(shù)據(jù)同步方法在數(shù)據(jù)的同步傳輸方面包括兩個部分Server (服務器)端數(shù)據(jù)同步和Client-Server (客戶端-服務器)數(shù)據(jù)同步。圖2示出了根據(jù)本發(fā)明實施例的同步數(shù)據(jù)在服務器端以及客戶端-服務器的數(shù) 據(jù)同步過程。如圖2所示,Server端數(shù)據(jù)同步采用數(shù)據(jù)庫觸發(fā)器技術監(jiān)聽需要同步的基礎數(shù)據(jù)表(S201)。當基礎數(shù)據(jù)表中的基礎數(shù)據(jù)發(fā)生變動時,同步觸發(fā)器便將這些變動內容以Sql語句形式、XML格式的形式或者Json格式的形式生成變動記錄同步統(tǒng)一保存到一個變動日志表中,作為下一步Client-Server數(shù)據(jù)同步的數(shù)據(jù)來源。Client-Server數(shù)據(jù)同步采用“反Ajax”技術,通過實現(xiàn)“服務器推送”來解決Ajax輪詢頻繁發(fā)送請求的問題。Web客戶端的同步時機可以選擇登錄系統(tǒng)或打開業(yè)務界面時,客戶端向服務器發(fā)起同步請求(S202),同步請求中包括最近一次同步時間戳及需同步的基礎數(shù)據(jù)范圍信息,服務器從變動日志表中進行數(shù)據(jù)分頁查詢(S203),查詢客戶端最近一次同步時間戳后發(fā)生的變動記錄,然后在服務器與Web客戶端保持持續(xù)連接狀態(tài)下分批、源源不斷的將查詢到的需同步的基礎數(shù)據(jù)范圍內的變動記錄傳輸給客戶端,而不需客戶端發(fā)送多次同步請求。這種通過最近一次同步時間戳及需同步的基礎數(shù)據(jù)范圍進行限定同步范圍的增量、按需下載策略,可以實現(xiàn)分散下載數(shù)據(jù),減少每次同步的數(shù)據(jù)量,達到降低服務器、網絡壓力的目的。下面分別對實施本發(fā)明過程中的Server端數(shù)據(jù)同步和Client-Server數(shù)據(jù)同步做更加詳細的說明。Server端數(shù)據(jù)同步客戶端緩存數(shù)據(jù)一般為基礎數(shù)據(jù),基礎數(shù)據(jù)具有數(shù)量穩(wěn)定、變動較少等特點,易于客戶端存儲與數(shù)據(jù)同步,Server端數(shù)據(jù)同步主要是將基礎數(shù)據(jù)表變動內容通過觸發(fā)器同步到變動日志表中。圖3示出了根據(jù)本發(fā)明實施例的客戶端數(shù)據(jù)同步的數(shù)據(jù)處理方法。如圖3所示,當用戶維護基礎數(shù)據(jù)時,觸發(fā)器將根據(jù)數(shù)據(jù)變動類型分別處理如果是插入操作,那么將直接在變動日志表中記錄一條“插入”類型的變動記錄,內容包括基礎數(shù)據(jù)表名、更新時間戳、基礎數(shù)據(jù)本身的鍵值、變動類型、變動描述語句等信息;如果是更新操作,觸發(fā)器首先將刪除本條基礎數(shù)據(jù)對應的所有“更新”類變動記錄,然后重新插入一條“更新”類型的變動記錄,記錄最新變動情況,保證變動記錄表中只有一條更新類型記錄;如果是刪除操作,觸發(fā)器直接在日志表中插入一條“刪除”類型的變動記錄。通過上述處理,每一條基礎數(shù)據(jù)在變動日志表中的變動記錄數(shù)量始終不多于三條,每條分別代表一種變動類型(插入、刪除、更新),進而達到遏制變動記錄隨基礎數(shù)據(jù)修改而無限增長的目的。變動記錄的相對穩(wěn)定保證了服務器端分頁查詢的效率,同時也減少了網絡傳輸?shù)臄?shù)據(jù)量和交互頻率,提升同步效率。Client-Server 數(shù)據(jù)同步如圖2所示,Client-Server數(shù)據(jù)同步采用Http流技術將服務器端數(shù)據(jù)分批“推送”給客戶端(參見步驟S204 S207),在同步期間不會像Ajax輪詢方式頻繁建立、釋放連接,而是一直保持連接打開狀態(tài)。具體實現(xiàn)方式為首先在頁面中動態(tài)創(chuàng)建隱藏的iframe標簽,該標簽的src屬性指向服務器端同步servlet路徑,向服務器發(fā)起同步請求,建立連接;servlet在接收到請求后采用分頁查詢方式循環(huán)檢索所有符合條件的變動記錄(S204、S206),每檢索到一頁數(shù)據(jù)即發(fā)送給客戶端進行處理(S205、S207)。每次發(fā)送時servlet會創(chuàng)建一個script標簽,該標簽內部帶有JavaScript同步函數(shù),同步函數(shù)的參數(shù)就是由變動記錄組裝成的JSON數(shù)組字符串構成,servlet使用Response的FlushO方法分段發(fā)送數(shù)據(jù);當客戶端Iframe被附加上這一 script標簽時,標簽中的同步方法將會在客戶端執(zhí)行,JSON數(shù)組中的每條變動Sql會將最終結果更新到Web客戶端嵌入式數(shù)據(jù)庫中,保證客戶端與服務器數(shù)據(jù)一致,同步完成后會記錄最后同步的時間戳,然后銷毀iframe對象從而釋放 客戶端與服務器端的連接。在傳送數(shù)據(jù)過程中還可以采用Http壓縮技術對數(shù)據(jù)進行壓縮,以降低數(shù)據(jù)體積。在本發(fā)明的一個具體實施例中,壓縮后的數(shù)據(jù)體積可以縮小至原來的1/10左右,大大降低傳送數(shù)據(jù)體積,傳輸數(shù)據(jù)所消耗的時間也隨著體積的縮小而減少。另外,數(shù)據(jù)不斷傳輸會增加iframe所在頁面占用內存的開銷,為了防止客戶端內存的溢出,還可以在客戶端對iframe對象接收數(shù)據(jù)的數(shù)量進行控制,在數(shù)據(jù)量達到上限(預設限值)時銷毀iframe對象,強制瀏覽器釋放內存,然后再次創(chuàng)建iframe對象重新連接服務器,經過實踐測試,每次發(fā)送5000條記錄,同步10次銷毀重建iframe情況下,同步效果最好。上述實踐測試的環(huán)境服務器和客戶端電腦配置如下
權利要求
1.一種Web客戶端與服務器的數(shù)據(jù)同步方法,包括 服務器在基礎數(shù)據(jù)表中的基礎數(shù)據(jù)發(fā)生變動時將所述變動內容生成變動記錄同步保存至變動日志表中; 服務器根據(jù)Web客戶端的同步請求從所述變動日志表中查詢所述變動記錄,在服務器與所述Web客戶端的持續(xù)連接狀態(tài)下分批將所述變動記錄傳輸至所述Web客戶端;其中, 所述Web客戶端的同步請求包括最近一次同步時間戳和需要同步的基礎數(shù)據(jù)范圍;所述服務器根據(jù)所述同步請求查詢所述同步時間戳后發(fā)生的且屬于所述基礎數(shù)據(jù)范圍的變動記錄。
2.如權利要求I所述的數(shù)據(jù)同步方法,其中,所述Web客戶端在登錄系統(tǒng)或者打開業(yè)務界面時向服務器發(fā)起同步請求。
3.如權利要求I所述的數(shù)據(jù)同步方法,其中,在基礎數(shù)據(jù)表中的基礎數(shù)據(jù)發(fā)生變動時,所述服務器將所述變動內容以Sql語句的形式、XML格式的形式、或Json格式的形式生成變動記錄同步保存至所述變動日志表中。
4.如權利要求3所述的數(shù)據(jù)同步方法,其中,所述變動記錄包括基礎數(shù)據(jù)表名、同步時間戳、基礎數(shù)據(jù)本身的鍵值、變動類型、變動描述語句。
5.如權利要求I所述的數(shù)據(jù)同步方法,其中,在所述服務器在基礎數(shù)據(jù)表中的基礎數(shù)據(jù)發(fā)生變動時將所述變動內容生成變動記錄同步保存至變動日志表中的過程中, 如果所述變動為插入操作,則所述服務器直接在所述變動日志表中記錄一條“插入”類型的變動記錄; 如果所述變動為更新操作,則所述服務器首先刪除本條基礎數(shù)據(jù)對應的所有“更新”類變動記錄,然后重新插入一條“更新”類型的變動記錄; 如果所述變動類型為刪除操作,則所述服務器直接在日志表中插入一條“刪除”類型的變動記錄。
6.如權利要求I所述的數(shù)據(jù)同步方法,其中,所述服務器在接收到所述Web客戶端的同步請求后采用分頁查詢方式循環(huán)檢索所有符合條件的變動記錄,每檢索到一頁數(shù)據(jù)即傳輸給所述Web客戶端。
7.如權利要求6所述的數(shù)據(jù)同步方法,其中,所述服務器每次向所述Web客戶端傳輸檢索到的數(shù)據(jù)時,創(chuàng)建一個內部帶有同步函數(shù)的標簽;以及, 在客戶端執(zhí)行所述標簽中的同步方法。
8.如權利要求7所述的數(shù)據(jù)同步方法,其中,所述Web客戶端在所述同步完成后記錄最后同步的時間戳。
9.如權利要求7所述的數(shù)據(jù)同步方法,其中,當所述Web客戶端接收所述服務器傳輸?shù)淖儎佑涗洿螖?shù)達到預設限值時,所述Web客戶端記錄最后同步的時間戳并主動斷開與所述服務器的連接,釋放瀏覽器內存,然后再次創(chuàng)建與所述服務器的連接請求。
10.一種Web客戶端數(shù)據(jù)同步推送服務器,包括 同步觸發(fā)器,用于在基礎數(shù)據(jù)表中的基礎數(shù)據(jù)發(fā)生變動時將所述變動內容生成變動記錄同步保存至變動日志表中; 變動日志表,用于保存通過所述同步觸發(fā)器同步的基礎數(shù)據(jù)表的變動記錄; 同步請求響應單元,用于根據(jù)Web客戶端的同步請求從所述變動日志表中查詢所述變動記錄,在與所述Web客戶端的持續(xù)連接狀態(tài)下分批將所述變動記錄傳輸至所述Web客戶端;其中, 所述同步請求響應單元根據(jù)所述Web客戶端需要同步的基礎數(shù)據(jù)范圍查詢所述Web客戶端最近一次同步時間戳后發(fā)生的變動記錄。
11.一種Web客戶端與服務器的數(shù)據(jù)同步系統(tǒng),包括Web客戶端和如權利要求10所述的服務器。
全文摘要
本發(fā)明提供了一種Web客戶端與服務器的數(shù)據(jù)同步方法和裝置,其中的方法包括服務器在基礎數(shù)據(jù)表中的基礎數(shù)據(jù)發(fā)生變動時將所述變動內容生成變動記錄同步保存至變動日志表中;服務器根據(jù)Web客戶端的同步請求從所述變動日志表中查詢所述變動記錄,在服務器與所述Web客戶端的持續(xù)連接狀態(tài)下分批將所述變動記錄傳輸至所述Web客戶端;其中,所述Web客戶端的同步請求包括最近一次同步時間戳和需要同步的基礎數(shù)據(jù)范圍;所述服務器根據(jù)所述同步請求查詢所述同步時間戳后發(fā)生的且屬于所述基礎數(shù)據(jù)范圍的變動記錄。本發(fā)明能夠更加充分地利用服務器的計算能力和存儲能力,減小網絡傳輸與交互壓力,提升應用的響應速度和用戶體驗。
文檔編號H04L29/08GK102904887SQ20121036685
公開日2013年1月30日 申請日期2012年9月26日 優(yōu)先權日2012年9月26日
發(fā)明者黃小衛(wèi), 姜韜, 葉麗艷, 王雪峰, 劉兵 申請人:東軟集團股份有限公司