專利名稱:Widget更新方法、系統(tǒng)、Widget客戶端及Widget服務(wù)器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信技術(shù),尤其涉及一種移動(dòng)終端的Widget技術(shù)。
背景技術(shù):
Widget (微技)是一種小型的Web應(yīng)用程序,與普通網(wǎng)頁一樣使用現(xiàn)有的標(biāo)準(zhǔn) Web 技術(shù)開發(fā),包括 HTML(HyperText Mark-up Language,超文本標(biāo)記語言)、CSS(cading Style Sheet,級(jí)聯(lián)樣式表,是一組格式設(shè)置規(guī)則)、JavaScript ( 一種客戶端腳本語言)、 XML (Extensible Markup Language,可擴(kuò)展標(biāo)記語言)禾口 Ajax (Asynchronous JavaScript and XML,異步JavaScript和XML)等。與普通網(wǎng)頁的最顯著區(qū)別就是,它不依賴于瀏覽器 顯示框架,且被設(shè)計(jì)為具有特定的功能,如股票、天氣預(yù)報(bào)、時(shí)鐘、游戲等。由于Widget具備小巧輕便、功能完整、個(gè)性化形式多樣等優(yōu)勢(shì),因此已被應(yīng)用到 移動(dòng)終端領(lǐng)域,增強(qiáng)用戶體驗(yàn),提供高性價(jià)比的服務(wù)。而且Widget應(yīng)用具有另一個(gè)特點(diǎn)—— 可更新性。即使Widget應(yīng)用已經(jīng)發(fā)布,也允許開發(fā)者不斷地完善Widget應(yīng)用,修復(fù)之前版 本的缺陷,或添加更多的功能。用戶則可以下載最新的Widget應(yīng)用,得到最新的、更合理的 體驗(yàn)。發(fā)布Widget應(yīng)用時(shí),是將該應(yīng)用的所有本地文件,如javascript腳本或圖片,遵 從zip ( —種文件格式)標(biāo)準(zhǔn),使用deflate算法(一種計(jì)算機(jī)文件的壓縮算法)或存儲(chǔ)方 法打包整合起來,形成一個(gè)zip壓縮文件,通常以.wgt為后綴名,如圖1所示。符合Widget標(biāo)準(zhǔn)定義的Widget應(yīng)用zip包由三部分組成文件數(shù)據(jù)區(qū)、文件目錄 區(qū)和文件目錄結(jié)束區(qū)。文件數(shù)據(jù)區(qū)表示壓縮包內(nèi)的文件數(shù)據(jù),有多少個(gè)文件和目錄就有多 少個(gè)文件數(shù)據(jù)區(qū),這也是zip壓縮包的主體部分,包含了所有文件的數(shù)據(jù);每個(gè)文件數(shù)據(jù)區(qū) 都對(duì)應(yīng)一個(gè)文件目錄區(qū),該部分只是記錄了目錄名或文件名,以及對(duì)應(yīng)的文件數(shù)據(jù)區(qū)起始 位置在整個(gè)Zip文件中的偏移;文件目錄結(jié)束區(qū)是zip壓縮包的最后一部分,包含了壓縮包 內(nèi)目錄、文件的數(shù)量,以及文件目錄區(qū)的尺寸。根據(jù)zip格式內(nèi)部的關(guān)系,當(dāng)文件數(shù)據(jù)區(qū)發(fā) 生了變化,則文件目錄區(qū)和文件目錄結(jié)束區(qū)也會(huì)變化,但后兩個(gè)區(qū)的信息量小,其尺寸占整 個(gè)zip包的比例非常小,有時(shí)可能都不到1%.以圖1為例,現(xiàn)有名為weekdays的Widget 應(yīng)用壓縮包包含4個(gè)文件數(shù)據(jù)區(qū),分別為index, html、config. xml、scripts、scripts/ dayfinder. js,同樣包含4個(gè)文件目錄區(qū)和1個(gè)文件目錄結(jié)束區(qū)。當(dāng)Widget應(yīng)用包中只有少數(shù)文件發(fā)生修改時(shí),則只有相應(yīng)幾個(gè)文件數(shù)據(jù)區(qū)發(fā)生 變化,其余大部分內(nèi)容并未改變。此時(shí),如果按照傳統(tǒng)的Widget更新方式,將Widget應(yīng)用 包數(shù)據(jù)全部下載。這樣比較浪費(fèi)網(wǎng)絡(luò)資源,甚至產(chǎn)生額外的流量費(fèi)用,并且數(shù)據(jù)交互過多又 會(huì)增加更新失敗的風(fēng)險(xiǎn)。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種Widget更新方法、系統(tǒng)、Widget客戶端及 Widget服務(wù)器,以提高更新效率。
5
為解決以上技術(shù)問題,本發(fā)明提供了一種微技(Widget)更新方法,該方法包括Widget客戶端向Widget服務(wù)器發(fā)送更新請(qǐng)求;所述Widget服務(wù)器接收所述更新請(qǐng)求后,提取所述Widget客戶端的當(dāng)前版本應(yīng) 用包與最新版本應(yīng)用包,并進(jìn)行比較;所述Widget服務(wù)器構(gòu)造響應(yīng)體并發(fā)送給所述Widget客戶端,所述響應(yīng)體包括根 據(jù)比較結(jié)果及預(yù)置的更新策略構(gòu)造的更新文檔;所述Widget客戶端接收所述響應(yīng)體,并根據(jù)所述更新文檔進(jìn)行更新。進(jìn)一步地,所述Widget客戶端發(fā)送的更新請(qǐng)求中攜帶Widget當(dāng)前版本號(hào),所述 Widget服務(wù)器根據(jù)所述Widget當(dāng)前版本號(hào)獲取所述當(dāng)前版本應(yīng)用包。進(jìn)一步地,所述Widget服務(wù)器發(fā)送所述響應(yīng)體時(shí),更新所述Widget客戶端和 Widget版本號(hào)的對(duì)應(yīng)關(guān)系,所述Widget服務(wù)器接收所述更新請(qǐng)求時(shí),根據(jù)所述widget客戶 端及其對(duì)應(yīng)關(guān)系獲取所述當(dāng)前版本應(yīng)用包。進(jìn)一步地,所述更新策略為根據(jù)發(fā)生變化的文件和信息構(gòu)造所述更新文檔;或,判斷發(fā)生變化的文件的數(shù)量和/或大小是否超過預(yù)設(shè)閾值,如果超過,則將最新 版本的全部文件作為更新文檔,否則根據(jù)發(fā)生變化的文件和信息構(gòu)造所述更新文檔。進(jìn)一步地,所述Widget應(yīng)用包包括文件數(shù)據(jù)區(qū)、文件目錄區(qū)和文件目錄結(jié)束區(qū), 將所述Widget客戶端的當(dāng)前版本應(yīng)用包與最新版本應(yīng)用包進(jìn)行比較包括解析當(dāng)前版本應(yīng)用包和最新版本應(yīng)用包;將當(dāng)前版本和最新版本分別生成一個(gè)數(shù)據(jù)區(qū)序列,其中每個(gè)文件數(shù)據(jù)區(qū)內(nèi)容 (Data)及其對(duì)應(yīng)的文件/目錄名(ID)作為數(shù)據(jù)區(qū)序列的一個(gè)節(jié)點(diǎn);將最新版本的每個(gè)節(jié)點(diǎn)與當(dāng)前版本的每個(gè)節(jié)點(diǎn)逐一進(jìn)行比較,如果ID相同,Data 不同,則標(biāo)記為更新,如果當(dāng)前版本沒有相應(yīng)的ID,則標(biāo)記為新增,如果最新版本沒有相應(yīng) 的ID,則標(biāo)記為刪除;所述更新文檔包括更新的文件數(shù)據(jù)區(qū)信息、新增的文件數(shù)據(jù)區(qū)信息、刪除的文件 數(shù)據(jù)區(qū)信息以及最新版本文件目錄區(qū)和文件目錄結(jié)束區(qū)。進(jìn)一步地,所述更新的文件數(shù)據(jù)區(qū)信息包括ID以及Data,所述新增的文件數(shù)據(jù) 區(qū)信息包括ID,所處當(dāng)前版本應(yīng)用包中的位置以及Data,所述刪除的文件數(shù)據(jù)區(qū)信息包括 ID。進(jìn)一步地,所述響應(yīng)體還包括更新文檔類型指示,用于指示該更新文檔為全部更 新文檔或部分更新文檔;所述Widget客戶端根據(jù)所述更新文檔類型指示判斷更新文檔類 型;更新文檔為全部更新文檔時(shí),所述Widget客戶端將更新文檔替代當(dāng)前Widget應(yīng)用包; 更新文檔為部分更新文檔時(shí),所述Widget客戶端根據(jù)更新文檔對(duì)當(dāng)前Widget應(yīng)用包對(duì)應(yīng) 部分進(jìn)行更新。進(jìn)一步地,所述Widget客戶端根據(jù)所述更新文檔進(jìn)行更新包括解析所述更新文檔,提取其中的Data和對(duì)應(yīng)的ID,且按更新、刪除、新增標(biāo)記進(jìn)行 分類表示管理,同時(shí)提取文件目錄區(qū)和文件目錄結(jié)束區(qū)內(nèi)容。解析當(dāng)前版本應(yīng)用包包,按順序識(shí)別出每個(gè)文件數(shù)據(jù)區(qū),及其對(duì)應(yīng)的ID,形成壓縮 包數(shù)據(jù)區(qū)管理序列(OrigSeq);
6
將所述更新文檔中標(biāo)記為刪除的文件數(shù)據(jù)區(qū)從OrigSeq序列中刪除;將所述更新 文檔中標(biāo)記為更新的文件數(shù)據(jù)區(qū)替換OrigSeq序列中對(duì)應(yīng)的文件數(shù)據(jù)區(qū);將所述更新文檔 中標(biāo)記為新增的文件數(shù)據(jù)區(qū)按照指定位置插入到OrigSeq序列中;將新版本的文件目錄區(qū) 和文件目錄結(jié)束區(qū)替換OrigSeq序列的相應(yīng)區(qū)域,形成一個(gè)新版本的壓縮包數(shù)據(jù)區(qū)管理序 列(NewSeq)。為解決以上技術(shù)問題,本發(fā)明還提供了一種微技(Widget)服務(wù)器,所述Widget服 務(wù)器包括網(wǎng)絡(luò)交互單元,用于接收Widget客戶端發(fā)送的更新請(qǐng)求,以及向所述Widget客戶 端發(fā)送響應(yīng)體,所述響應(yīng)體包括更新文檔;Widget應(yīng)用包數(shù)據(jù)庫,用于存儲(chǔ)各版本W(wǎng)idget應(yīng)用包;版本比較單元,用于將所述Widget客戶端的當(dāng)前版本應(yīng)用包與最新版本應(yīng)用包 進(jìn)行比較;響應(yīng)體構(gòu)造單元,用于根據(jù)比較結(jié)果及預(yù)置的更新策略,構(gòu)造所述更新文檔,以及 構(gòu)造響應(yīng)體。為解決以上技術(shù)問題,本發(fā)明還提供了一種微技(Widget)客戶端,所述Widget客 戶端包括網(wǎng)絡(luò)交互單元,用于向Widget服務(wù)器發(fā)送更新請(qǐng)求,以及接收所述Widget服務(wù) 器發(fā)送的響應(yīng)體,所述響應(yīng)體包括更新文檔,所述更新文檔是所述Widget服務(wù)器根據(jù)所述 Widget客戶端的當(dāng)前版本應(yīng)用包與最新版本應(yīng)用包的比較結(jié)果和更新策略構(gòu)造的;所述Widget更新單元,用于根據(jù)所述更新文檔完成Widget更新。本發(fā)明技術(shù)中,Widget服務(wù)器根據(jù)當(dāng)前版本應(yīng)用包與最新版本應(yīng)用包的比較結(jié)果 生成更新文檔,Widget客戶端根據(jù)該更新文檔進(jìn)行Widget更新,從而可實(shí)現(xiàn)Widget的部 分更新,并有效提高更新效率。
圖1是Widget應(yīng)用的zip包格式;圖2是本發(fā)明Widget更新方法的示意圖;圖3是本發(fā)明實(shí)施例Widget服務(wù)器實(shí)現(xiàn)更新的流程圖;圖4是本發(fā)明實(shí)施例Widget客戶端完成更新的流程圖;圖5是本發(fā)明Widget服務(wù)器版本內(nèi)容比較判定算法流程圖;圖6是本發(fā)明Widget更新系統(tǒng)的示意圖;圖7是Widget服務(wù)器的版本比較單元的模塊結(jié)構(gòu)示意圖;圖8是Widget客戶端的Widget更新單元的模塊結(jié)構(gòu)示意圖;圖9是部分更新模塊的模塊結(jié)構(gòu)示意圖。
具體實(shí)施例方式本發(fā)明技術(shù)中,Widget服務(wù)器根據(jù)當(dāng)前版本應(yīng)用包與最新版本應(yīng)用包的比較結(jié)果 生成更新文檔,Widget客戶端根據(jù)該更新文檔進(jìn)行Widget更新,從而可實(shí)現(xiàn)Widget的部 分更新。
如圖2所示,本發(fā)明Widget更新方法包括步驟201 微技(Widget)客戶端向Widget服務(wù)器發(fā)送更新請(qǐng)求;步驟202 所述Widget服務(wù)器接收所述更新請(qǐng)求后,提取所述Widget客戶端的當(dāng) 前版本應(yīng)用包與最新版本應(yīng)用包,并進(jìn)行比較;Widget服務(wù)器包括但不限于以下兩種方式獲得Widget客戶端當(dāng)前版本應(yīng)用包方式一所述Widget客戶端發(fā)送的更新請(qǐng)求中攜帶Widget當(dāng)前版本號(hào),所述 Widget服務(wù)器根據(jù)所述Widget當(dāng)前版本號(hào)獲取所述當(dāng)前版本應(yīng)用包。如果該Widget服務(wù)器可提供多個(gè)Widget的應(yīng)用包,則該更新請(qǐng)求還應(yīng)該攜帶相 應(yīng)的Widget標(biāo)識(shí)或名稱,以與版本號(hào)一起唯一的確定一個(gè)Widget應(yīng)用包。方式二 所述Widget服務(wù)器發(fā)送所述響應(yīng)體時(shí),更新所述Widget客戶端和 Widget版本號(hào)的對(duì)應(yīng)關(guān)系,所述Widget服務(wù)器接收所述更新請(qǐng)求時(shí),根據(jù)所述widget客戶 端及其對(duì)應(yīng)關(guān)系獲取所述當(dāng)前版本應(yīng)用包。所述Widget應(yīng)用包包括文件數(shù)據(jù)區(qū)、文件目錄區(qū)和文件目錄結(jié)束區(qū),將所述 Widget客戶端的當(dāng)前版本應(yīng)用包與最新版本應(yīng)用包進(jìn)行比較包括al.解析當(dāng)前版本應(yīng)用包和最新版本應(yīng)用包;bl.將當(dāng)前版本和最新版本分別生成一個(gè)數(shù)據(jù)區(qū)序列,其中每個(gè)文件數(shù)據(jù)區(qū)內(nèi)容 (Data)及其對(duì)應(yīng)的文件/目錄名(ID)作為數(shù)據(jù)區(qū)序列的一個(gè)節(jié)點(diǎn);cl.將最新版本的每個(gè)節(jié)點(diǎn)與當(dāng)前版本的每個(gè)節(jié)點(diǎn)逐一進(jìn)行比較,如果ID相同, Data不同,則標(biāo)記為更新,如果當(dāng)前版本沒有相應(yīng)的ID,則標(biāo)記為新增,如果最新版本沒有 相應(yīng)的ID,則標(biāo)記為刪除。步驟203 所述Widget服務(wù)器構(gòu)造響應(yīng)體并發(fā)送給所述Widget客戶端,所述響應(yīng) 體中包括根據(jù)比較結(jié)果及預(yù)置的更新策略構(gòu)造的更新文檔;具體的更新策略可以靈活設(shè)置,包括但不限于以下策略策略一根據(jù)發(fā)生變化的文件和信息構(gòu)造所述更新文檔;策略二 判斷發(fā)生變化的文件的數(shù)量和/或大小是否超過預(yù)設(shè)閾值,如果超過, 則將最新版本的全部文件作為更新文檔,否則根據(jù)發(fā)生變化的文件和信息構(gòu)造所述更新文 檔。優(yōu)選地,采用第二種策略。本發(fā)明中也將根據(jù)發(fā)生變化的文件和信息構(gòu)造的更新文檔稱為部分更新文檔,將 根據(jù)最新版本全部文件構(gòu)造的更新文檔稱為全部更新文檔。步驟204 所述Widget客戶端接收所述響應(yīng)體,并根據(jù)所述更新文檔進(jìn)行更新。所述(部分)更新文檔包括更新的文件數(shù)據(jù)區(qū)信息、新增的文件數(shù)據(jù)區(qū)信息、刪除 的文件數(shù)據(jù)區(qū)信息以及最新版本文件目錄區(qū)和文件目錄結(jié)束區(qū),具體地所述更新的文件數(shù)據(jù)區(qū)信息包括文件/目錄名以及文件數(shù)據(jù)區(qū)內(nèi)容,所述新增的 文件數(shù)據(jù)區(qū)信息包括文件/目錄名,所處當(dāng)前版本應(yīng)用包中的位置以及文件數(shù)據(jù)區(qū)內(nèi)容, 所述刪除的文件數(shù)據(jù)區(qū)信息包括文件/目錄名。若更新策略采用策略二,則所述響應(yīng)體還包括更新文檔類型指示,用于指示該更 新文檔為全部更新文檔或部分更新文檔;所述Widget客戶端根據(jù)所述更新文檔類型指示 判斷更新文檔類型;更新文檔為全部更新文檔時(shí),所述Widget客戶端將更新文檔替代當(dāng) 前Widget應(yīng)用包;更新文檔為部分更新文檔時(shí),所述Widget客戶端根據(jù)更新文檔對(duì)當(dāng)前Widget應(yīng)用包對(duì)應(yīng)部分進(jìn)行更新。若更新文檔是根據(jù)發(fā)生變化的文件和信息構(gòu)造而成,則所述Widget客戶端根據(jù) 所述更新文檔進(jìn)行更新包括a2.解析所述更新文檔,提取其中的Data和對(duì)應(yīng)的ID,且按更新、刪除、新增標(biāo)記 進(jìn)行分類表示管理,同時(shí)提取文件目錄區(qū)和文件目錄結(jié)束區(qū)內(nèi)容。b2.解析當(dāng)前版本應(yīng)用包包,按順序識(shí)別出每個(gè)Data,及其對(duì)應(yīng)的ID,形成壓縮包 數(shù)據(jù)區(qū)管理序列(OrigSeq);c2.將所述更新文檔中標(biāo)記為刪除的文件數(shù)據(jù)區(qū)從OrigSeq序列中刪除;將所述 更新文檔中標(biāo)記為更新的文件數(shù)據(jù)區(qū)替換OrigSeq序列中對(duì)應(yīng)的文件數(shù)據(jù)區(qū);將所述更新 文檔中標(biāo)記為新增的文件數(shù)據(jù)區(qū)按照指定位置插入到OrigSeq序列中;將新版本的文件目 錄區(qū)和文件目錄結(jié)束區(qū)替換OrigSeq序列的相應(yīng)區(qū)域,形成一個(gè)新版本的壓縮包數(shù)據(jù)區(qū)管 理序列(NewSeq)。實(shí)施例一本發(fā)明Widget更新方法包括A. Widget客戶端發(fā)送攜帶當(dāng)前Widget應(yīng)用版本號(hào)(Vl),和Widget應(yīng)用 URI (Uniform Resource Identifier,通用資源標(biāo)志符)的更新網(wǎng)絡(luò)請(qǐng)求給相應(yīng)的Widget 服務(wù)器;B. Widget服務(wù)器接收到網(wǎng)絡(luò)請(qǐng)求后,執(zhí)行策略判斷——從本地服務(wù)器中取出Vl 版本的Widget應(yīng)用包,和最新版本的Widget應(yīng)用包進(jìn)行比較;C. Widget服務(wù)器構(gòu)造并返回響應(yīng)體;如果新版本W(wǎng)idget應(yīng)用包中發(fā)生變化的文件數(shù)量比較多(如超過設(shè)定閾值),或 者發(fā)生變化的文件總尺寸占Widget應(yīng)用包比例很大(如超過設(shè)定閾值),則直接將新版本 的Widget應(yīng)用包作為A步驟的響應(yīng)體返回給Widget客戶端;如果只有少數(shù)文件發(fā)生了更改,且尺寸比例較小,服務(wù)器則構(gòu)造一個(gè)部分更新文 檔,其中包含了更新的文件數(shù)據(jù)區(qū)信息、新增的文件數(shù)據(jù)區(qū)信息、刪除的文件數(shù)據(jù)區(qū)信息和 文件目錄區(qū)、文件目錄結(jié)束區(qū)。將該文檔作為A步驟的響應(yīng)體返回給Widget客戶端;D. Widget客戶端收到服務(wù)器的響應(yīng)體后,完成更新。如果響應(yīng)體中為Widget應(yīng)用包,則Widget客戶端將其全部接收,替換舊版本 Widget應(yīng)用包;如果響應(yīng)體中是部分更新文檔格式,則Widget客戶端解析讀取文檔中的文件數(shù) 據(jù)區(qū)信息,替換當(dāng)前版本中對(duì)應(yīng)的文件數(shù)據(jù)區(qū),或刪除指定數(shù)據(jù)區(qū),或插入新增的文件數(shù)據(jù) 區(qū)到指定位置。最后用文檔中的文件目錄區(qū)和文件目錄結(jié)束區(qū)替換當(dāng)前版本的相應(yīng)部分, 完成Widget應(yīng)用包的更新流程。實(shí)施例二從Widget服務(wù)器角度描述,本發(fā)明Widget更新方法包括微技(Widget)服務(wù)器 接收Widget客戶端發(fā)送的更新請(qǐng)求后,提取所述Widget客戶端的當(dāng)前版本應(yīng)用包與最新 版本應(yīng)用包,并進(jìn)行比較;所述Widget服務(wù)器構(gòu)造響應(yīng)體并發(fā)送給所述Widget客戶端,所 述響應(yīng)體包括根據(jù)比較結(jié)果及預(yù)置的更新策略構(gòu)造的更新文檔。更新策略可為前述策略一或策略二,優(yōu)選地,該實(shí)施例采用策略二,下面將結(jié)合附圖及實(shí)施例對(duì)本發(fā)明Widget服務(wù)器的處理流程進(jìn)行更詳細(xì)的說明,其中更新策略中,設(shè)置 發(fā)生變化的文件的數(shù)量比例閾值Tl和大小比例閾值T2分別為60%和70%。如圖3所示,Widget服務(wù)器實(shí)現(xiàn)更新的方法包括301. Widget服務(wù)器接收到Widget客戶端發(fā)送的更新請(qǐng)求,解析出Widget應(yīng)用名 和當(dāng)前應(yīng)用版本號(hào);302. Widget服務(wù)器從存儲(chǔ)Widget應(yīng)用的數(shù)據(jù)庫中讀取指定版本號(hào)和名稱的 Widget應(yīng)用包,以及最新版本的Widget應(yīng)用包;303. Widget服務(wù)器根據(jù)zip壓縮文件標(biāo)準(zhǔn),解析當(dāng)前版本W(wǎng)idget應(yīng)用包和最新 版本W(wǎng)idget應(yīng)用包,按順序?qū)⒚總€(gè)文件數(shù)據(jù)區(qū)內(nèi)容(data)和對(duì)應(yīng)的文件名或目錄名信息 (id)構(gòu)造一個(gè)節(jié)點(diǎn)加入到序列結(jié)構(gòu)中,生成兩個(gè)數(shù)據(jù)區(qū)序列,當(dāng)前版本應(yīng)用包的數(shù)據(jù)區(qū)序 列為Seql,最新版本應(yīng)用包的數(shù)據(jù)區(qū)序列為Seq2 ;304. Widget服務(wù)器按順序讀取Seq2的每個(gè)節(jié)點(diǎn),根據(jù)內(nèi)容比較判定算法(參考圖 5),與Seql序列中的節(jié)點(diǎn)比較,如果有同文件名或目錄名(即id相同)的數(shù)據(jù)區(qū),則繼續(xù) 判斷其數(shù)據(jù)區(qū)內(nèi)容data是否相同,若內(nèi)容不同,表示該數(shù)據(jù)區(qū)發(fā)生更新,將Seq2的該節(jié)點(diǎn) 標(biāo)記為更新;如果沒有相同id的數(shù)據(jù)區(qū),則該數(shù)據(jù)區(qū)為新增的,將Seq2的該節(jié)點(diǎn)標(biāo)記為新 增;當(dāng)遍歷Seql中的節(jié)點(diǎn),發(fā)現(xiàn)該節(jié)點(diǎn)的id并未與Seq2中某節(jié)點(diǎn)id—致,則將Seql中的 該節(jié)點(diǎn)標(biāo)記為刪除。305. Widget服務(wù)器進(jìn)行更新策略判斷。遍歷Seq2序列,得到待更新和新增文件 數(shù)據(jù)區(qū)的數(shù)量和總大小,如果發(fā)生變化的數(shù)據(jù)區(qū)數(shù)量過多,超過了 Tl,或者總大小占整個(gè) Widget應(yīng)用包的比例較大,超過了 T2,則不適合部分更新,執(zhí)行全部更新策略,轉(zhuǎn)到306’ 步驟,如果發(fā)生變化的數(shù)據(jù)區(qū)數(shù)量和總大小均小于相應(yīng)閾值,則執(zhí)行部分更新策略,306步 驟;306. Widget服務(wù)器構(gòu)造部分更新文檔。以XML標(biāo)記語言為例。該文檔中應(yīng)包含更 新的文件數(shù)據(jù)區(qū)信息、新增的文件數(shù)據(jù)區(qū)信息、刪除的文件數(shù)據(jù)區(qū)信息,以及新版本文件目 錄區(qū)和文件目錄結(jié)束區(qū)。對(duì)于每個(gè)更新的文件數(shù)據(jù)區(qū),由一個(gè)<updateEntry></updateEntry>元素表示。 至少包含如下屬性ID表示該數(shù)據(jù)區(qū)對(duì)應(yīng)的文件/目錄名,length表示該數(shù)據(jù)區(qū)的大小。 開標(biāo)簽〈updateEntry〉與閉標(biāo)簽〈/updateEntry〉之間的內(nèi)容為更新后的文件數(shù)據(jù)區(qū),其長 度與length屬性值一致,且可以為0。對(duì)于每個(gè)刪除的文件數(shù)據(jù)區(qū),由一個(gè)〈delEntryX/delEntry〉元素表示。至少包 含如下屬性ID表示該數(shù)據(jù)區(qū)對(duì)應(yīng)的文件/目錄名。對(duì)于每個(gè)新增的文件數(shù)據(jù)區(qū),由一個(gè)<newEntry></newEntry>元素表示。至少包 含如下屬性ID表示該數(shù)據(jù)區(qū)對(duì)應(yīng)的文件名或目錄名,position表示該數(shù)據(jù)區(qū)應(yīng)被插入的 位置,length表示該數(shù)據(jù)區(qū)的大小。開標(biāo)簽〈newEntry〉與閉標(biāo)簽〈/newEntry〉之間的內(nèi) 容為新增的文件數(shù)據(jù)區(qū),其長度與length屬性值一致,且可以為0。對(duì)于文件目錄區(qū)和文件目錄結(jié)束區(qū),由<endEntry></endEntry>元素表示,至少 包含如下屬性length表示該數(shù)據(jù)區(qū)的大小。開標(biāo)簽〈endEntry〉與閉標(biāo)簽〈/endEntry〉之 間的內(nèi)容為新版本文件目錄區(qū)和文件目錄結(jié)束區(qū)正文,其長度與length屬性值一致。由此,就構(gòu)成了一個(gè)以XML結(jié)構(gòu)表示的部分更新文檔。以圖1為例,若部分更新文檔為如下形式<updateDescription><updateEntry ID =”config. xml” length =” 400” >config. xml 正文數(shù)據(jù)</updateEntry><updateEntry ID =,,index, html” length =” 1200" >index. html 正文數(shù)據(jù)</updateEntry><delEntry ID = " scripts/dayf inder. js" X/delEntry><newEntry ID = "sciripts/daySearch. js,,position ="3"length =,,600,,>daySearch. js IE文數(shù)據(jù) </newEntry><endEntry length =,,100,,>......</endEntry></updateDescription>則表示,有兩個(gè)需要更新的文件數(shù)據(jù)區(qū),一個(gè)刪除的文件數(shù)據(jù)區(qū),和一個(gè)新增的文 件數(shù)據(jù)區(qū),它應(yīng)被插在第三個(gè)文件數(shù)據(jù)區(qū)之后。306’ . Widget服務(wù)器執(zhí)行全部更新策略。服務(wù)器從存儲(chǔ)Widget應(yīng)用的數(shù)據(jù)庫中 讀取指定最新版本的Widget應(yīng)用包,將它作為更新文檔。307. Widget服務(wù)器構(gòu)造Widget客戶端更新請(qǐng)求的響應(yīng)體,按照具體的應(yīng) 用層協(xié)議封裝,若為部分更新,則將部分更新文檔作為響應(yīng)體正文,并指示相應(yīng)的 MIME (Multipurpose Internet Mail Extensions,多功能網(wǎng)絡(luò)郵件擴(kuò)展)類型,對(duì)于 XML 文 檔,則MIME類型為appl ication/xml,表示XML類型的應(yīng)用,若為全部更新,則將最新版本的 Widget應(yīng)用包直接作為更新請(qǐng)求響應(yīng)體的正文,并指定MIME類型為application/Widget, 表示W(wǎng)idget類型的應(yīng)用;308. Widget服務(wù)器將封裝后的響應(yīng)體通過網(wǎng)絡(luò)發(fā)送給Widget客戶端,完成 Widget服務(wù)器側(cè)的更新流程。實(shí)施例三從Widget客戶端的角度描述,本發(fā)明Widget更新方法包括微技(Widget)客戶 端向Widget服務(wù)器發(fā)送更新請(qǐng)求;所述Widget客戶端接收Widget服務(wù)器發(fā)送的響應(yīng)體, 所述響應(yīng)體包括更新文檔,所述更新文檔是所述Widget服務(wù)器根據(jù)所述Widget客戶端的 當(dāng)前版本應(yīng)用包與最新版本應(yīng)用包的比較結(jié)果和更新策略構(gòu)造的;所述Widget客戶端根 據(jù)所述更新文檔進(jìn)行更新。下面將結(jié)合附圖及實(shí)施例對(duì)本發(fā)明Widget客戶端的處理流程進(jìn)行更詳細(xì)的說 明,如圖4所示,實(shí)施例中Widget客戶端進(jìn)行更新的流程包括401. Widget客戶端接收到Widget服務(wù)器對(duì)更新請(qǐng)求的響應(yīng)體,解析得到MIME類 型和正文數(shù)據(jù);402.更新類型判斷;判斷依據(jù)是MIME類型,如果MIME類型是application/Widget,則表示全部更新, 正文數(shù)據(jù)為新版本W(wǎng)idget應(yīng)用包,直接用其替換當(dāng)前版本W(wǎng)idget應(yīng)用包,執(zhí)行409’ ;如果 MIME類型是application/xml,則表示部分更新,正文數(shù)據(jù)是部分更新文檔,繼續(xù)執(zhí)行403。403.解析部分更新文檔。解析所述更新文檔,提取其中的Data和對(duì)應(yīng)的ID,且按更新、刪除、新增標(biāo)記進(jìn)行分類表示管理,同時(shí)提取文件目錄區(qū)和文件目錄結(jié)束區(qū)內(nèi)容構(gòu)造一個(gè)更新數(shù)據(jù)區(qū)節(jié)點(diǎn)序列(updateSeq),為每個(gè)〈updateEntry〉生成一個(gè)節(jié) 點(diǎn),以ID屬性值作為節(jié)點(diǎn)標(biāo)識(shí),并保存該元素的數(shù)據(jù)區(qū)內(nèi)容;構(gòu)造一個(gè)刪除數(shù)據(jù)區(qū)節(jié)點(diǎn)序 列(delSeq),為每個(gè)〈delEntry〉構(gòu)造一個(gè)節(jié)點(diǎn),以ID屬性值作為節(jié)點(diǎn)標(biāo)識(shí)。構(gòu)造一個(gè)新增 數(shù)據(jù)區(qū)節(jié)點(diǎn)序列(newSeq),為每個(gè)〈newSeq〉構(gòu)造一個(gè)節(jié)點(diǎn),以ID屬性值作為節(jié)點(diǎn)標(biāo)識(shí),并 保存position屬性值和數(shù)據(jù)區(qū)內(nèi)容;最后將文檔中的〈endEntry〉元素內(nèi)容(文件目錄區(qū) 和文件目錄結(jié)束區(qū))保存到緩沖區(qū)(bufferl)中。404.解析當(dāng)前版本W(wǎng)idget應(yīng)用包; 按順序識(shí)別出每個(gè)文件數(shù)據(jù)區(qū)內(nèi)容,及其對(duì)應(yīng)的文件/目錄名,形成壓縮包數(shù)據(jù) 區(qū)管理序列(OrigSeq),具體地,遵從zip格式標(biāo)準(zhǔn),將每個(gè)文件數(shù)據(jù)區(qū)內(nèi)容提取出來構(gòu) 成節(jié)點(diǎn),以該數(shù)據(jù)區(qū)所代表的文件名或目錄名作為節(jié)點(diǎn)標(biāo)識(shí),形成一個(gè)文件數(shù)據(jù)區(qū)序列 (OrigSeq),序列的最后一個(gè)節(jié)點(diǎn)保存了文件目錄區(qū)和文件目錄結(jié)束區(qū)內(nèi)容。將所述更新文檔中標(biāo)記為刪除的文件數(shù)據(jù)區(qū)從OrigSeq序列中刪除;將所述更新 文檔中標(biāo)記為更新的文件數(shù)據(jù)區(qū)替換OrigSeq序列中對(duì)應(yīng)的文件數(shù)據(jù)區(qū);將所述更新文檔 中標(biāo)記為新增的文件數(shù)據(jù)區(qū)按照指定位置插入到OrigSeq序列中;將新版本的文件目錄區(qū) 和文件目錄結(jié)束區(qū)替換OrigSeq序列的相應(yīng)區(qū)域,形成一個(gè)新版本的壓縮包數(shù)據(jù)區(qū)管理序 列(NewSeq)。即執(zhí)行以下步驟405至408 ;405.遍歷刪除數(shù)據(jù)區(qū)節(jié)點(diǎn)序列delSeq,完成刪除操作;依次根據(jù)每個(gè)節(jié)點(diǎn)的ID標(biāo)識(shí)值,在當(dāng)前Widget應(yīng)用文件數(shù)據(jù)區(qū)序列OrigSeq中 找到對(duì)應(yīng)的節(jié)點(diǎn),將該節(jié)點(diǎn)刪除;406.遍歷更新數(shù)據(jù)區(qū)節(jié)點(diǎn)序列updateSeq,完成對(duì)應(yīng)節(jié)點(diǎn)的內(nèi)容更新操作;具體地,根據(jù)每個(gè)節(jié)點(diǎn)(Node2)的ID標(biāo)識(shí)值,在OrigSeq序列中找到對(duì)應(yīng)的節(jié)點(diǎn) (Nodel),將Node2節(jié)點(diǎn)的文件數(shù)據(jù)區(qū)內(nèi)容替換到Nodel節(jié)點(diǎn)的數(shù)據(jù)區(qū)。407.遍歷新增數(shù)據(jù)區(qū)節(jié)點(diǎn)序列newSeq,完成新增操作;根據(jù)節(jié)點(diǎn)的ID和數(shù)據(jù)區(qū)內(nèi)容構(gòu)造一個(gè)新的節(jié)點(diǎn),插入到OrigSeq序列中position 屬性所指位置的節(jié)點(diǎn)之后。408.將新版本的文件目錄區(qū)和文件目錄結(jié)束區(qū)內(nèi)容(buffer 1)替換到OrigSeq最 后一個(gè)節(jié)點(diǎn)的數(shù)據(jù)區(qū);至此完成更新。如果delSeq或newSeq或updateSeq為空,則不執(zhí)行相應(yīng)步驟。409.至此,OrigSeq已經(jīng)是存儲(chǔ)了更新后數(shù)據(jù)區(qū)的序列,將每個(gè)節(jié)點(diǎn)的數(shù)據(jù)區(qū)內(nèi) 容寫入到本地臨時(shí)文件中。409’ .執(zhí)行全部更新,將響應(yīng)體正文直接保存到本地臨時(shí)文件中;410.刪除當(dāng)前版本W(wǎng)idget應(yīng)用包,將臨時(shí)文件名改為同名Widget應(yīng)用,完成 Widget應(yīng)用的更新。圖5是Widget服務(wù)器進(jìn)行版本內(nèi)容比較的算法流程圖501.從新版本數(shù)據(jù)區(qū)序列Seq2的N2位置開始取節(jié)點(diǎn),N2初始值為0。502.如果N2節(jié)點(diǎn)為空,表示Seq2序列已經(jīng)遍歷完成,結(jié)束,否則與Seql序列的節(jié) 點(diǎn)進(jìn)行比較,執(zhí)行503步驟;503.從附位置開始遍歷Seql序列(附初始值為0),直至找到ID標(biāo)識(shí)一致的節(jié)
12點(diǎn),或者Seql遍歷結(jié)束;504.如果m節(jié)點(diǎn)和N2節(jié)點(diǎn)中ID標(biāo)識(shí)一致,即表示同一個(gè)文件名或目錄名的文件 數(shù)據(jù)區(qū),則執(zhí)行數(shù)據(jù)區(qū)內(nèi)容判斷,是否發(fā)生了更新,506步驟,如果沒有從Seql中找到ID — 致的節(jié)點(diǎn),則將執(zhí)行505;505.表示Seql中沒有與N2節(jié)點(diǎn)ID標(biāo)識(shí)一致的節(jié)點(diǎn),N2節(jié)點(diǎn)是新增節(jié)點(diǎn)。則將 N2標(biāo)識(shí)為“新增”,并且指向Seq2下一個(gè)節(jié)點(diǎn),重復(fù)501 ;506.表示Seql中存在與N2對(duì)應(yīng)的節(jié)點(diǎn),假設(shè)該節(jié)點(diǎn)位于Seql的N3位置,則附 到N3之間的節(jié)點(diǎn)在Seq2中沒有對(duì)應(yīng),將它們標(biāo)記為“刪除”;507.判斷N3節(jié)點(diǎn)與N2節(jié)點(diǎn)的文件數(shù)據(jù)區(qū)內(nèi)容是否相同。如果相同,則執(zhí)行509 跳過繼續(xù)遍歷Seq2 ;如果不相同,執(zhí)行508 ;508.表示Seql的N3節(jié)點(diǎn)內(nèi)容發(fā)生了更新,將N2節(jié)點(diǎn)標(biāo)記為“更新”;509.同ID的節(jié)點(diǎn)比較完成,指向Seq2的下一個(gè)節(jié)點(diǎn),指向Seql的N3+1節(jié)點(diǎn),繼 續(xù)進(jìn)行節(jié)點(diǎn)比較,重復(fù)501步驟,直至Seq2遍歷結(jié)束。為實(shí)現(xiàn)以上方法,本發(fā)明還提供了一種Widget更新系統(tǒng),如圖6所示,該系統(tǒng)包括 微技(Widget)客戶端及Widget服務(wù)器,所述Widget客戶端包括網(wǎng)絡(luò)交互單元,用于向Widget服務(wù)器發(fā)送更新請(qǐng)求,以及接收所述Widget服務(wù)器 發(fā)送向響應(yīng)體,所述響應(yīng)體包括更新文檔;所述Widget客戶端發(fā)送的更新請(qǐng)求中攜帶Widget當(dāng)前版本號(hào),所述Widget服務(wù) 器的版本比較單元根據(jù)所述Widget當(dāng)前版本號(hào)獲取所述當(dāng)前版本應(yīng)用包。所述Widget更新單元,用于根據(jù)所述更新文檔完成Widget更新;所述Widget服務(wù)器包括網(wǎng)絡(luò)交互單元,用于接收所述更新請(qǐng)求,以及向所述Widget客戶端發(fā)送所述響應(yīng) 體;Widget應(yīng)用包數(shù)據(jù)庫,用于存儲(chǔ)各版本W(wǎng)idget應(yīng)用包;版本比較單元,用于將所述Widget客戶端的當(dāng)前版本應(yīng)用包與最新版本應(yīng)用包 進(jìn)行比較;響應(yīng)體構(gòu)造單元,用于根據(jù)比較結(jié)果及預(yù)置的更新策略,構(gòu)造所述更新文檔,以及 構(gòu)造響應(yīng)體。所述更新策略為根據(jù)發(fā)生變化的文件和信息構(gòu)造所述更新文檔;或,判斷發(fā)生變化的文件的數(shù)量和/或大小是否超過預(yù)設(shè)閾值,如果超過,則將最新 版本的全部文件作為更新文檔,否則根據(jù)發(fā)生變化的文件和信息構(gòu)造所述更新文檔。所述Widget應(yīng)用包包括文件數(shù)據(jù)區(qū)、文件目錄區(qū)和文件目錄結(jié)束區(qū),具體地,如 圖7所示,所述Widget服務(wù)器的版本比較單元包括Widget包內(nèi)容提取模塊,用于將當(dāng)前版本和最新版本分別生成一個(gè)數(shù)據(jù)區(qū)序列, 其中每個(gè)文件數(shù)據(jù)區(qū)內(nèi)容(Data)及其對(duì)應(yīng)的文件/目錄名(ID)作為數(shù)據(jù)區(qū)序列的一個(gè)節(jié)占.
^ \\\ 版本比較模塊,用于將最新版本的每個(gè)節(jié)點(diǎn)與當(dāng)前版本的每個(gè)節(jié)點(diǎn)逐一進(jìn)行比 較,如果ID相同,Data不同,則標(biāo)記為更新,如果當(dāng)前版本沒有相應(yīng)的ID,則標(biāo)記為新增,如
13果最新版本沒有相應(yīng)的ID,則標(biāo)記為刪除;所述響應(yīng)體構(gòu)造單元構(gòu)造的(部分)更新文檔包括更新的文件數(shù)據(jù)區(qū)信息、新增 的文件數(shù)據(jù)區(qū)信息、刪除的文件數(shù)據(jù)區(qū)信息以及最新版本文件目錄區(qū)和文件目錄結(jié)束區(qū)。所述更新的文件數(shù)據(jù)區(qū)信息包括文件/目錄名以及文件數(shù)據(jù)區(qū)內(nèi)容,所述新增的 文件數(shù)據(jù)區(qū)信息包括文件/目錄名,所處壓縮包中的位置,以及文件數(shù)據(jù)區(qū)內(nèi)容、刪除的文 件數(shù)據(jù)區(qū)信息包括文件/目錄名。進(jìn)一步地,所述響應(yīng)體還包括更新文檔類型指示,用于指示該更新文檔為全部更 新文檔或部分更新文檔;如圖8所示,所述Widget更新單元包括更新判斷模塊、全部更新模 塊及部分更新模塊;更新判斷模塊,用于根據(jù)更新文檔類型指示判斷更新文檔類型;全部更新模塊,指示為全部更新文檔時(shí),用于將所述更新文檔替代當(dāng)前Widget應(yīng) 用包;部分更新模塊,指示為部分更新文檔時(shí),用于根據(jù)所述更新文檔對(duì)當(dāng)前Widget應(yīng) 用包對(duì)應(yīng)部分進(jìn)行更新。進(jìn)一步地,如圖9所示,所述部分更新模塊包括更新文檔分析子模塊,用于解析所述更新文檔,提取其中的Data和對(duì)應(yīng)的ID,且 按更新、刪除、新增標(biāo)記進(jìn)行分類表示管理,同時(shí)提取文件目錄區(qū)和文件目錄結(jié)束區(qū)內(nèi)容;Widget包內(nèi)容提取子模塊,用于解析當(dāng)前版本應(yīng)用包包,按順序識(shí)別出每個(gè)文件 數(shù)據(jù)區(qū)內(nèi)容,及其對(duì)應(yīng)的文件/目錄名標(biāo)識(shí),形成壓縮包數(shù)據(jù)區(qū)管理序列(OrigSeq);Widget包內(nèi)容更新子模塊,用于將文檔中標(biāo)記為刪除的文件數(shù)據(jù)區(qū)從OrigSeq序 列中刪除;將所述更新文檔中標(biāo)記為更新的文件數(shù)據(jù)區(qū)替換OrigSeq序列中對(duì)應(yīng)的文件數(shù) 據(jù)區(qū);將所述更新文檔中標(biāo)記為新增的文件數(shù)據(jù)區(qū)按照指定位置插入到OrigSeq序列中; 將新版本的文件目錄區(qū)和文件目錄結(jié)束區(qū)替換OrigSeq序列的相應(yīng)區(qū)域,形成一個(gè)新版本 的壓縮包數(shù)據(jù)區(qū)管理序列(NewSeq)。本發(fā)明還提供了一種Widget服務(wù)器,所述Widget服務(wù)器包括網(wǎng)絡(luò)交互單元,用于接收Widget客戶端發(fā)送的更新請(qǐng)求,以及向所述Widget客戶 端發(fā)送響應(yīng)體,所述響應(yīng)體包括更新文檔; 所述Widget客戶端發(fā)送的更新請(qǐng)求中攜帶Widget當(dāng)前版本號(hào),所述Widget服務(wù) 器的版本比較單元根據(jù)所述Widget當(dāng)前版本號(hào)獲取所述當(dāng)前版本應(yīng)用包。Widget應(yīng)用包數(shù)據(jù)庫,用于存儲(chǔ)各版本W(wǎng)idget應(yīng)用包;版本比較單元,用于將所述Widget客戶端的當(dāng)前版本應(yīng)用包與最新版本應(yīng)用包 進(jìn)行比較;響應(yīng)體構(gòu)造單元,用于根據(jù)比較結(jié)果及預(yù)置的更新策略,構(gòu)造所述更新文檔,以及 構(gòu)造響應(yīng)體。所述更新策略為根據(jù)發(fā)生變化的文件和信息構(gòu)造所述更新文檔;或,判斷發(fā)生變化的文件的數(shù)量和/或大小是否超過預(yù)設(shè)閾值,如果超過,則將最新 版本的全部文件作為更新文檔,否則根據(jù)發(fā)生變化的文件和信息構(gòu)造所述更新文檔。比如, 如果數(shù)量和大小均各自小于某閾值,則部分更新;反之,如果發(fā)生更新的文件數(shù)據(jù)區(qū)過多,或者發(fā)生更改的文件數(shù)據(jù)區(qū)大小較大,則全部更新。進(jìn)一步地,所述Widget應(yīng)用包包括文件數(shù)據(jù)區(qū)、文件目錄區(qū)和文件目錄結(jié)束區(qū), Widget服務(wù)器的版本比較單元遍歷兩個(gè)版本的數(shù)據(jù)區(qū)序列,比較其中數(shù)據(jù)區(qū)的變化,并記 錄發(fā)生更新的文件數(shù)據(jù)區(qū)數(shù)量和大小,用于更新方式?jīng)Q策判斷。具體而言,如果對(duì)應(yīng)的文件 數(shù)據(jù)區(qū)內(nèi)容(即,表示同一個(gè)文件或目錄的數(shù)據(jù)區(qū))發(fā)生了更新,則對(duì)該文件數(shù)據(jù)區(qū)進(jìn)行標(biāo) 記,并記錄其大??;如果有新增的文件數(shù)據(jù)區(qū),則也對(duì)該數(shù)據(jù)區(qū)標(biāo)記,同時(shí)記錄其大小。最終 得到了內(nèi)容發(fā)生變化的文件數(shù)據(jù)區(qū)數(shù)量,以及總大小。具體地,所述Widget服務(wù)器的版本比較單元包括Widget包內(nèi)容提取模塊,用于將當(dāng)前版本和最新版本分別生成一個(gè)數(shù)據(jù)區(qū)序列, 其中每個(gè)文件數(shù)據(jù)區(qū)內(nèi)容(Data)及其對(duì)應(yīng)的文件/目錄名(ID)作為數(shù)據(jù)區(qū)序列的一個(gè)節(jié)占.
^ \\\ 版本比較模塊,用于將最新版本的每個(gè)節(jié)點(diǎn)與當(dāng)前版本的每個(gè)節(jié)點(diǎn)逐一進(jìn)行比 較,如果ID相同,Data不同,則標(biāo)記為更新,如果當(dāng)前版本沒有相應(yīng)的ID,則標(biāo)記為新增,如 果最新版本沒有相應(yīng)的ID,則標(biāo)記為刪除;所述響應(yīng)體構(gòu)造單元構(gòu)造的(部分)更新文檔包括更新的文件數(shù)據(jù)區(qū)信息、新增 的文件數(shù)據(jù)區(qū)信息、刪除的文件數(shù)據(jù)區(qū)信息以及最新版本文件目錄區(qū)和文件目錄結(jié)束區(qū)。 部分更新文檔可以使用XML或其他約定的標(biāo)記語言。所述更新的文件數(shù)據(jù)區(qū)信息包括文件/目錄名以及文件數(shù)據(jù)區(qū)內(nèi)容,所述新增的 文件數(shù)據(jù)區(qū)信息包括文件/目錄名,所處當(dāng)前版本應(yīng)用包中的位置,以及文件數(shù)據(jù)區(qū)內(nèi)容、 刪除的文件數(shù)據(jù)區(qū)信息包括文件/目錄名。另外,本發(fā)明還提供了一種微技(Widget)客戶端,所述Widget客戶端包括網(wǎng)絡(luò)交互單元,用于向Widget服務(wù)器發(fā)送更新請(qǐng)求,以及接收所述Widget服務(wù) 器發(fā)送的響應(yīng)體,所述響應(yīng)體包括更新文檔,所述更新文檔是所述Widget服務(wù)器根據(jù)所述 Widget客戶端的當(dāng)前版本應(yīng)用包與最新版本應(yīng)用包的比較結(jié)果和更新策略構(gòu)造的;所述Widget更新單元,用于根據(jù)所述更新文檔完成Widget更新。所述(部分)更新文檔包括更新的文件數(shù)據(jù)區(qū)信息、新增的文件數(shù)據(jù)區(qū)信息、刪 除的文件數(shù)據(jù)區(qū)信息以及最新版本文件目錄區(qū)和文件目錄結(jié)束區(qū),所述更新的文件數(shù)據(jù)區(qū) 信息包括文件/目錄名以及文件數(shù)據(jù)區(qū)內(nèi)容,所述新增的文件數(shù)據(jù)區(qū)信息包括文件/目錄 名,所處當(dāng)前版本應(yīng)用包中的位置,以及文件數(shù)據(jù)區(qū)內(nèi)容、刪除的文件數(shù)據(jù)區(qū)信息包括文件 /目錄名。進(jìn)一步地,所述響應(yīng)體還包括更新文檔類型指示,用于指示該更新文檔為全部更 新文檔或部分更新文檔;所述Widget更新單元包括更新判斷模塊,用于根據(jù)更新文檔類型指示判斷更新文檔類型;全部更新模塊,更新文檔為全部更新文檔時(shí),用于將更新文檔替代當(dāng)前Widget應(yīng) 用包;部分更新模塊,更新文檔為部分更新文檔時(shí),用于根據(jù)更新文檔對(duì)當(dāng)前Widget應(yīng) 用包對(duì)應(yīng)部分進(jìn)行更新。所述部分更新模塊包括更新文檔分析子模塊、更新文檔分析子模塊,用于解析所述更新文檔,提取其中的Data和對(duì)應(yīng)的ID,且按更新、刪除、新增標(biāo)記進(jìn)行分類表示管理,同時(shí)提取文件目錄區(qū)和文件目錄結(jié)束區(qū)內(nèi)容;Widget包內(nèi)容提取子模塊,用于解析當(dāng)前版本應(yīng)用包包,按順序識(shí)別出每個(gè)文件 數(shù)據(jù)區(qū)內(nèi)容,及其對(duì)應(yīng)的文件/目錄名標(biāo)識(shí),形成壓縮包數(shù)據(jù)區(qū)管理序列(OrigSeq);Widget包內(nèi)容更新子模塊,用于將文檔中標(biāo)記為刪除的文件數(shù)據(jù)區(qū)從OrigSeq序 列中刪除;將所述更新文檔中標(biāo)記為更新的文件數(shù)據(jù)區(qū)替換OrigSeq序列中對(duì)應(yīng)的文件數(shù) 據(jù)區(qū);將所述更新文檔中標(biāo)記為新增的文件數(shù)據(jù)區(qū)按照指定位置插入到OrigSeq序列中; 將新版本的文件目錄區(qū)和文件目錄結(jié)束區(qū)替換OrigSeq序列的相應(yīng)區(qū)域,形成一個(gè)新版本 的壓縮包數(shù)據(jù)區(qū)管理序列(NewSeq)。本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過程序來指令 相關(guān)硬件完成,所述程序可以存儲(chǔ)于計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如只讀存儲(chǔ)器、磁盤或光盤 等。可選地,上述實(shí)施例的全部或部分步驟也可以使用一個(gè)或多個(gè)集成電路來實(shí)現(xiàn)。相應(yīng) 地,上述實(shí)施例中的各模塊/單元可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的 形式實(shí)現(xiàn)。本發(fā)明不限制于任何特定形式的硬件和軟件的結(jié)合。本發(fā)明方法、系統(tǒng)及設(shè)備,通過比較Widget客戶端當(dāng)前版本和最新版本的應(yīng)用 包,并根據(jù)比較結(jié)果和預(yù)置更新策略生成具有針對(duì)性的更新文檔,進(jìn)而Widget客戶端根據(jù) 該更新文檔進(jìn)行Widget更新,可以有效提供更新效率,尤其是當(dāng)發(fā)生變化的文件數(shù)量或大 小較少時(shí),可以更有效地利用了無線網(wǎng)絡(luò)資源,減少了 Widget應(yīng)用更新的網(wǎng)絡(luò)交互時(shí)間, 降低了可能的網(wǎng)絡(luò)異常導(dǎo)致更新失敗的風(fēng)險(xiǎn)。
權(quán)利要求
一種微技(Widget)更新方法,其特征在于,該方法包括Widget客戶端向Widget服務(wù)器發(fā)送更新請(qǐng)求;所述Widget服務(wù)器接收所述更新請(qǐng)求后,提取所述Widget客戶端的當(dāng)前版本應(yīng)用包與最新版本應(yīng)用包,并進(jìn)行比較;所述Widget服務(wù)器構(gòu)造響應(yīng)體并發(fā)送給所述Widget客戶端,所述響應(yīng)體包括根據(jù)比較結(jié)果及預(yù)置的更新策略構(gòu)造的更新文檔;所述Widget客戶端接收所述響應(yīng)體,并根據(jù)所述更新文檔進(jìn)行更新。
2.如權(quán)利要求1所述的方法,其特征在于所述Widget客戶端發(fā)送的更新請(qǐng)求中攜帶 Widget當(dāng)前版本號(hào),所述Widget服務(wù)器根據(jù)所述Widget當(dāng)前版本號(hào)獲取所述當(dāng)前版本應(yīng) 用包。
3.如權(quán)利要求1所述的方法,其特征在于所述Widget服務(wù)器發(fā)送所述響應(yīng)體時(shí),更 新所述Widget客戶端和Widget版本號(hào)的對(duì)應(yīng)關(guān)系,所述Widget服務(wù)器接收所述更新請(qǐng)求 時(shí),根據(jù)所述widget客戶端及其對(duì)應(yīng)關(guān)系獲取所述當(dāng)前版本應(yīng)用包。
4.如權(quán)利要求1所述的方法,其特征在于,所述更新策略為根據(jù)發(fā)生變化的文件和信息構(gòu)造所述更新文檔;或,判斷發(fā)生變化的文件的數(shù)量和/或大小是否超過預(yù)設(shè)閾值,如果超過,則將最新版本 的全部文件作為更新文檔,否則根據(jù)發(fā)生變化的文件和信息構(gòu)造所述更新文檔。
5.如權(quán)利要求1所述的方法,所述Widget應(yīng)用包包括文件數(shù)據(jù)區(qū)、文件目錄區(qū)和文件 目錄結(jié)束區(qū),其特征在于將所述Widget客戶端的當(dāng)前版本應(yīng)用包與最新版本應(yīng)用包進(jìn)行 比較包括解析當(dāng)前版本應(yīng)用包和最新版本應(yīng)用包;將當(dāng)前版本和最新版本分別生成一個(gè)數(shù)據(jù)區(qū)序列,其中每個(gè)文件數(shù)據(jù)區(qū)內(nèi)容(Data) 及其對(duì)應(yīng)的文件/目錄名(ID)作為數(shù)據(jù)區(qū)序列的一個(gè)節(jié)點(diǎn);將最新版本的每個(gè)節(jié)點(diǎn)與當(dāng)前版本的每個(gè)節(jié)點(diǎn)逐一進(jìn)行比較,如果ID相同,Data不 同,則標(biāo)記為更新,如果當(dāng)前版本沒有相應(yīng)的ID,則標(biāo)記為新增,如果最新版本沒有相應(yīng)的 ID,則標(biāo)記為刪除;所述更新文檔包括更新的文件數(shù)據(jù)區(qū)信息、新增的文件數(shù)據(jù)區(qū)信息、刪除的文件數(shù)據(jù) 區(qū)信息以及最新版本文件目錄區(qū)和文件目錄結(jié)束區(qū)。
6.如權(quán)利要求5所述的方法,其特征在于所述更新的文件數(shù)據(jù)區(qū)信息包括ID以及 Data,所述新增的文件數(shù)據(jù)區(qū)信息包括ID,所處當(dāng)前版本應(yīng)用包中的位置以及Data,所述 刪除的文件數(shù)據(jù)區(qū)信息包括ID。
7.如權(quán)利要求1所述的方法,其特征在于,所述響應(yīng)體還包括更新文檔類型指示,用于 指示該更新文檔為全部更新文檔或部分更新文檔;所述Widget客戶端根據(jù)所述更新文檔 類型指示判斷更新文檔類型;更新文檔為全部更新文檔時(shí),所述Widget客戶端將更新文檔 替代當(dāng)前Widget應(yīng)用包;更新文檔為部分更新文檔時(shí),所述Widget客戶端根據(jù)更新文檔對(duì) 當(dāng)前Widget應(yīng)用包對(duì)應(yīng)部分進(jìn)行更新。
8.如權(quán)利要求1或7所述的方法,其特征在于所述Widget客戶端根據(jù)所述更新文檔 進(jìn)行更新包括解析所述更新文檔,提取其中的Data和對(duì)應(yīng)的ID,且按更新、刪除、新增標(biāo)記進(jìn)行分類表示管理,同時(shí)提取文件目錄區(qū)和文件目錄結(jié)束區(qū)內(nèi)容;解析當(dāng)前版本應(yīng)用包包,按順序識(shí)別出每個(gè)Data,及其對(duì)應(yīng)的ID,形成壓縮包數(shù)據(jù)區(qū) 管理序列(OrigSeq);將所述更新文檔中標(biāo)記為刪除的文件數(shù)據(jù)區(qū)從OrigSeq序列中刪除;將所述更新文 檔中標(biāo)記為更新的文件數(shù)據(jù)區(qū)替換OrigSeq序列中對(duì)應(yīng)的文件數(shù)據(jù)區(qū);將所述更新文檔中 標(biāo)記為新增的文件數(shù)據(jù)區(qū)按照指定位置插入到OrigSeq序列中;將新版本的文件目錄區(qū)和 文件目錄結(jié)束區(qū)替換OrigSeq序列的相應(yīng)區(qū)域,形成一個(gè)新版本的壓縮包數(shù)據(jù)區(qū)管理序列 (NewSeq) 0
9.一種微技(Widget)服務(wù)器,其特征在于,所述Widget服務(wù)器包括網(wǎng)絡(luò)交互單元,用于接收Widget客戶端發(fā)送的更新請(qǐng)求,以及向所述Widget客戶端發(fā) 送響應(yīng)體,所述響應(yīng)體包括更新文檔;Widget應(yīng)用包數(shù)據(jù)庫,用于存儲(chǔ)各版本W(wǎng)idget應(yīng)用包;版本比較單元,用于將所述Widget客戶端的當(dāng)前版本應(yīng)用包與最新版本應(yīng)用包進(jìn)行 比較;響應(yīng)體構(gòu)造單元,用于根據(jù)比較結(jié)果及預(yù)置的更新策略,構(gòu)造所述更新文檔,以及構(gòu)造 響應(yīng)體。
10.如權(quán)利要求9所述的服務(wù)器,其特征在于所述更新策略為 根據(jù)發(fā)生變化的文件和信息構(gòu)造所述更新文檔;或,判斷發(fā)生變化的文件的數(shù)量和/或大小是否超過預(yù)設(shè)閾值,如果超過,則將最新版本 的全部文件作為更新文檔,否則根據(jù)發(fā)生變化的文件和信息構(gòu)造所述更新文檔。
11.如權(quán)利要求9所述的服務(wù)器,其特征在于所述Widget應(yīng)用包包括文件數(shù)據(jù)區(qū)、文 件目錄區(qū)和文件目錄結(jié)束區(qū),所述Widget服務(wù)器的版本比較單元包括Widget包內(nèi)容提取模塊,用于將當(dāng)前版本和最新版本分別生成一個(gè)數(shù)據(jù)區(qū)序列,其中 每個(gè)文件數(shù)據(jù)區(qū)內(nèi)容(Data)及其對(duì)應(yīng)的文件/目錄名(ID)作為數(shù)據(jù)區(qū)序列的一個(gè)節(jié)點(diǎn); 版本比較模塊,用于將最新版本的每個(gè)節(jié)點(diǎn)與當(dāng)前版本的每個(gè)節(jié)點(diǎn)逐一進(jìn)行比較,如 果ID相同,Data不同,則標(biāo)記為更新,如果當(dāng)前版本沒有相應(yīng)的ID,則標(biāo)記為新增,如果最 新版本沒有相應(yīng)的ID,則標(biāo)記為刪除;所述響應(yīng)體構(gòu)造單元構(gòu)造的更新文檔包括更新的文件數(shù)據(jù)區(qū)信息、新增的文件數(shù)據(jù)區(qū) 信息、刪除的文件數(shù)據(jù)區(qū)信息以及最新版本文件目錄區(qū)和文件目錄結(jié)束區(qū)。
12.一種微技(Widget)客戶端,其特征在于,所述Widget客戶端包括網(wǎng)絡(luò)交互單元,用于向Widget服務(wù)器發(fā)送更新請(qǐng)求,以及接收所述Widget服務(wù)器發(fā)送 的響應(yīng)體,所述響應(yīng)體包括更新文檔,所述更新文檔是所述Widget服務(wù)器根據(jù)所述Widget 客戶端的當(dāng)前版本應(yīng)用包與最新版本應(yīng)用包的比較結(jié)果和更新策略構(gòu)造的; 所述Widget更新單元,用于根據(jù)所述更新文檔完成Widget更新。
13.如權(quán)利要求12所述的Widget客戶端,其特征在于,所述響應(yīng)體還包括更新文檔 類型指示,用于指示該更新文檔為全部更新文檔或部分更新文檔;所述Widget更新單元包 括更新判斷模塊,用于根據(jù)更新文檔類型指示判斷更新文檔類型; 全部更新模塊,更新文檔為全部更新文檔時(shí),用于將更新文檔替代當(dāng)前Widget應(yīng)用包;部分更新模塊,更新文檔為部分更新文檔時(shí),用于根據(jù)更新文檔對(duì)當(dāng)前Widget應(yīng)用包 對(duì)應(yīng)部分進(jìn)行更新。
14.如權(quán)利要求13所述的Widget客戶端,其特征在于所述部分更新模塊包括 更新文檔分析子模塊,用于解析所述更新文檔,提取其中的文件數(shù)據(jù)區(qū)內(nèi)容(Data)及其對(duì)應(yīng)的文件/目錄名(ID),且按更新、刪除、新增標(biāo)記進(jìn)行分類表示管理,同時(shí)提取文件 目錄區(qū)和文件目錄結(jié)束區(qū)內(nèi)容;Widget包內(nèi)容提取子模塊,用于解析當(dāng)前版本應(yīng)用包包,按順序識(shí)別出每個(gè)Data,及 其對(duì)應(yīng)的ID,形成壓縮包數(shù)據(jù)區(qū)管理序列(OrigSeq);Widget包內(nèi)容更新子模塊,用于將文檔中標(biāo)記為刪除的文件數(shù)據(jù)區(qū)從OrigSeq序列 中刪除;將所述更新文檔中標(biāo)記為更新的文件數(shù)據(jù)區(qū)替換OrigSeq序列中對(duì)應(yīng)的文件數(shù)據(jù) 區(qū);將所述更新文檔中標(biāo)記為新增的文件數(shù)據(jù)區(qū)按照指定位置插入到OrigSeq序列中;將 新版本的文件目錄區(qū)和文件目錄結(jié)束區(qū)替換OrigSeq序列的相應(yīng)區(qū)域,形成一個(gè)新版本的 壓縮包數(shù)據(jù)區(qū)管理序列(NewSeq)。
15.一種微技(Widget)更新系統(tǒng),其特征在于所述系統(tǒng)包括如權(quán)利要求9至11中任 一項(xiàng)所述的Widget服務(wù)器以及如權(quán)利要求12至14中任一項(xiàng)所述的Widget客戶端。
全文摘要
本發(fā)明涉及一種Widget更新方法、系統(tǒng)、Widget客戶端及Widget服務(wù)器。該方法包括Widget客戶端向Widget服務(wù)器發(fā)送更新請(qǐng)求;所述Widget服務(wù)器接收所述更新請(qǐng)求后,提取所述Widget客戶端的當(dāng)前版本應(yīng)用包與最新版本應(yīng)用包,并進(jìn)行比較;所述Widget服務(wù)器構(gòu)造響應(yīng)體并發(fā)送給所述Widget客戶端,所述響應(yīng)體包括根據(jù)比較結(jié)果及預(yù)置的更新策略構(gòu)造的更新文檔;所述Widget客戶端接收所述響應(yīng)體,并根據(jù)所述更新文檔進(jìn)行更新。本發(fā)明可以實(shí)現(xiàn)部分更新,提高更新效率。
文檔編號(hào)H04L29/08GK101977217SQ201010513880
公開日2011年2月16日 申請(qǐng)日期2010年10月15日 優(yōu)先權(quán)日2010年10月15日
發(fā)明者張銳利 申請(qǐng)人:中興通訊股份有限公司