發(fā)明實(shí)施例比較模塊的功能模塊示意圖;
[0055]圖8是本發(fā)明實(shí)施例更新數(shù)據(jù)的裝置的功能模塊示意圖;
[0056]圖9是本發(fā)明實(shí)施例更新數(shù)據(jù)的裝置的功能模塊示意圖;
[0057]圖10是本發(fā)明實(shí)施例更新數(shù)據(jù)的裝置的功能模塊示意圖;
【具體實(shí)施方式】
[0058]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明實(shí)施例作進(jìn)一步的詳細(xì)說明??梢岳斫獾氖牵颂幩枋龅木唧w實(shí)施例僅僅用于解釋本發(fā)明實(shí)施例,而非對(duì)本發(fā)明實(shí)施例的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明實(shí)施例相關(guān)的部分而非全部結(jié)構(gòu)。
[0059]實(shí)施例一
[0060]參考圖1,圖1是本發(fā)明實(shí)施例更新數(shù)據(jù)的方法第一實(shí)施例的流程示意圖。
[0061]在實(shí)施例一中,所述更新數(shù)據(jù)的方法包括:
[0062]步驟101,在預(yù)先設(shè)置的時(shí)間內(nèi)檢測(cè)預(yù)先存儲(chǔ)的數(shù)據(jù)是否有更新;
[0063]具體的,服務(wù)器端始終保持整個(gè)數(shù)據(jù)是有序的。單項(xiàng)數(shù)據(jù)為一個(gè)更新單元,每個(gè)更新單元都有一個(gè)唯一的ID進(jìn)行標(biāo)識(shí)。每個(gè)數(shù)據(jù)單元可包含多個(gè)數(shù)據(jù),每個(gè)數(shù)據(jù)定義不同的類型加以區(qū)分,其中數(shù)據(jù)單元所在的位置變化采用{rank,新值,舊值}格式,其余數(shù)據(jù)的變化采用{類型,新值}的格式。
[0064]服務(wù)器上的數(shù)據(jù)有變化時(shí),服務(wù)器都會(huì)發(fā)送一條通知給訂閱了的所有客戶端,每條通知只包含一個(gè)更新單元數(shù)據(jù),同一更新單元數(shù)據(jù)有多個(gè)類型數(shù)據(jù)有變化時(shí),可合并到一條更新通知中。
[0065]步驟102,若是,則獲取更新的數(shù)據(jù)信息,所述更新的數(shù)據(jù)信息包括更新的數(shù)據(jù)在預(yù)先存儲(chǔ)的有序數(shù)據(jù)集合中的第一位置序號(hào)、新數(shù)據(jù)值和更新的數(shù)據(jù)的屬性;
[0066]具體的,服務(wù)器檢測(cè)到有數(shù)據(jù)更新并計(jì)算數(shù)據(jù)所在有序集合中的位置p。
[0067]服務(wù)器進(jìn)一步獲取數(shù)據(jù)變化類別及對(duì)應(yīng)的新值{typel,valuel},{type2,value2}。
[0068]步驟103,獲取訂閱列表中存儲(chǔ)的客戶端中顯示的所有數(shù)據(jù)的第二位置序號(hào)集合,所述第二位置序號(hào)集合用于標(biāo)識(shí)所述客戶端顯示的所有數(shù)據(jù)在所述有序數(shù)據(jù)集合中的位置序號(hào);
[0069]具體的,假設(shè)服務(wù)器端有一個(gè)5項(xiàng)數(shù)據(jù)的列表,保存的信息依次為用戶id、昵稱、頭像在線時(shí)長(zhǎng),按用戶在線時(shí)長(zhǎng)降序排列,其中第2條數(shù)據(jù)的頭像修改為photo2,昵稱修改為L(zhǎng)isa,執(zhí)行步驟如下:
[0070]S1:獲取更新數(shù)據(jù)所在有序列表中的位置p,其值為2 ;
[0071]S2:獲取數(shù)據(jù)變化類別及對(duì)應(yīng)的新值{avatar,photol},{nick, Lisa};
[0072]S3:從訂閱列表中取客戶端1可見數(shù)據(jù)所有的數(shù)據(jù)序號(hào)中最大數(shù)據(jù)序號(hào)為f = 3 ;
[0073]S4:判定p〈 = f,若是,執(zhí)行S5,否則不需要向客戶端1發(fā)送此次更新;
[0074]S5:組裝更新協(xié)議{id, xx}, {avatar,photol},{nick, Lisa}下發(fā)給客戶端 1。
[0075]步驟104,比較所述第一位置序號(hào)和所述第二位置序號(hào)集合中所有的位置序號(hào),根據(jù)比較的結(jié)果更新數(shù)據(jù)。
[0076]優(yōu)選地,所述比較所述第一位置序號(hào)和所述第二位置序號(hào)集合中所有的位置序號(hào),根據(jù)比較的結(jié)果更新數(shù)據(jù),包括:
[0077]若所述第一位置序號(hào)小于等于所述第二位置序號(hào)集合中所有的位置序號(hào),則進(jìn)一步判斷所述更新后的所述數(shù)據(jù)的新位置序號(hào)以及更新前的所述數(shù)據(jù)的舊位置序號(hào),若所述新位置序號(hào)和所述舊位置序號(hào)均大于等于所述第二位置序號(hào)集合中所有的位置序號(hào),則結(jié)束更新數(shù)據(jù)的流程;
[0078]若所述更新后的所述數(shù)據(jù)的新位置序號(hào)以及更新前的所述數(shù)據(jù)的舊位置序號(hào)中有至少有一個(gè)小于所述第二位置序號(hào)集合中所有的位置序號(hào),則向所述客戶端發(fā)送更新數(shù)據(jù)的通知信息,所述更新數(shù)據(jù)的通知信息包括更新后的所述數(shù)據(jù)的新位置序號(hào)、更新前的所述數(shù)據(jù)的舊位置序號(hào)和新數(shù)據(jù)值;
[0079]若所述第一位置序號(hào)大于所述第二位置序號(hào)集合中所有的位置序號(hào),則返回執(zhí)行獲取訂閱列表中存儲(chǔ)的客戶端中顯示的所有數(shù)據(jù)的第二位置序號(hào)集合的步驟;
[0080]若所述第二位置序號(hào)集合中最大位置序號(hào)大于所述預(yù)先存儲(chǔ)的有序數(shù)據(jù)集合的最大位置序號(hào),則結(jié)束更新數(shù)據(jù)的流程。
[0081]具體的,從訂閱列表中取客戶端2可見數(shù)據(jù)偏移f,其值為2 ;
[0082]S6:判定p〈 = f為是,執(zhí)行S7 ;
[0083]S7:組裝更新協(xié)議{id,xx},{avatar, photol},{nick,Lisa}下發(fā)給客戶端 2,繼續(xù)S8 ;
[0084]S8:從訂閱列表中取客戶端3可見數(shù)據(jù)偏移f,其值為1
[0085]S9:判定p〈 = f為否,不需要發(fā)送更新通知給客戶端3 ;
[0086]S10:結(jié)束本次更新。
[0087]若以上步驟中涉及到有序集合位置變化,需要做特殊處理,
[0088]S21:獲取d[x]數(shù)據(jù)在有序集合中的新舊位置{rank,oldpos,newpos}
[0089]S22:從訂閱列表中取客戶端可見數(shù)據(jù)偏移f,執(zhí)行判定oldpos〈 = f或newpos〈=f,若是轉(zhuǎn)到S29,若否,繼續(xù)S23 ;
[0090]S23:服務(wù)器組裝數(shù)據(jù)更新協(xié)議數(shù)據(jù)下發(fā)給客戶端;
[0091]S24:客戶端接收協(xié)議,解析出{rank,oldpos, newpos},執(zhí)行判定oldpos>f&&newpos< = f,若是,轉(zhuǎn)到 S25 ;若否,轉(zhuǎn)到 S26 ;
[0092]S25:刪除本地第newpos項(xiàng)數(shù)據(jù)單元,并向所述服務(wù)器請(qǐng)求更新后的所述newpos項(xiàng)數(shù)據(jù)單元對(duì)應(yīng)的數(shù)據(jù);
[0093]S26:執(zhí)行判定 oldpos〈 = f&&newpos>f,若是,繼續(xù) S27 ;若否,轉(zhuǎn)到 S28 ;
[0094]S27:刪除第oldpos項(xiàng)數(shù)據(jù)單元,并向所述服務(wù)器請(qǐng)求更新后的所述oldpos項(xiàng)數(shù)據(jù)單元對(duì)應(yīng)的數(shù)據(jù);
[0095]S28:客戶端更新本地?cái)?shù)據(jù)顯示;
[0096]S29:客戶端數(shù)據(jù)更新結(jié)束。
[0097]本發(fā)明實(shí)施例通過在預(yù)先設(shè)置的時(shí)間內(nèi)檢測(cè)預(yù)先存儲(chǔ)的數(shù)據(jù)是否有更新;若是,則獲取更新的數(shù)據(jù)信息,所述更新的數(shù)據(jù)信息包括更新的數(shù)據(jù)在預(yù)先存儲(chǔ)的有序數(shù)據(jù)集合中的第一位置序號(hào)、新數(shù)據(jù)值和更新的數(shù)據(jù)的屬性;獲取訂閱列表中存儲(chǔ)的客戶端中顯示的所有數(shù)據(jù)的第二位置序號(hào)集合,所述第二位置序號(hào)集合用于標(biāo)識(shí)所述客戶端顯示的所有數(shù)據(jù)在所述有序數(shù)據(jù)集合中的位置序號(hào);比較所述第一位置序號(hào)和所述第二位置序號(hào)集合中所有的位置序號(hào),根據(jù)比較的結(jié)果更新數(shù)據(jù),實(shí)現(xiàn)客戶端同類多項(xiàng)數(shù)據(jù)的實(shí)時(shí)更新,同時(shí)大大降低了客戶端的請(qǐng)求次數(shù)和服務(wù)器的負(fù)擔(dān),提升了用戶體驗(yàn)。
[0098]實(shí)施例二
[0099]參考圖2,圖2是本發(fā)明實(shí)施例更新數(shù)據(jù)的方法第二實(shí)施例的流程示意圖。
[0100]在實(shí)施例一的基礎(chǔ)上,所述方法還包括:
[0101]步驟105,接收客戶端發(fā)送的訂閱數(shù)據(jù)的請(qǐng)求,并將所述客戶端加入所述訂閱列表,所述請(qǐng)求包括所述客戶端請(qǐng)求所述有序數(shù)據(jù)集合中的預(yù)先設(shè)置范圍內(nèi)的數(shù)據(jù);
[0102]步驟106,向所述客戶端發(fā)送與所述請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)。
[0103]具體的,客戶端本地沒有數(shù)據(jù),需要向服務(wù)器請(qǐng)求初始數(shù)據(jù),處理過程如下:顯示的最終效果圖如圖3所示,客戶端3向服務(wù)器請(qǐng)求相應(yīng)的數(shù)據(jù)后并顯示在本地。
[0104]S31:客戶端請(qǐng)求訂閱數(shù)據(jù);
[0105]S32:服務(wù)器將客戶端數(shù)據(jù)加入訂閱列表,設(shè)置可見數(shù)據(jù)范圍值為0 ;
[0106]S33:客戶端請(qǐng)求di?dj范圍內(nèi)的數(shù)據(jù);
[0107]S34:服務(wù)器更新可見數(shù)據(jù)范圍值j ;
[0108]S35:服務(wù)器下發(fā)di?dj范圍內(nèi)完整的數(shù)據(jù)給客戶端;
[0109]S36:客戶端顯示d0?dj范圍內(nèi)的數(shù)據(jù)(本處可重復(fù)S33?S36步驟,以獲取更多的可見數(shù)據(jù));
[0110]S37:進(jìn)入更新維護(hù)階段。
[0111]優(yōu)選地,S41:客戶端請(qǐng)求取消訂閱數(shù)據(jù);
[0112]S42:服務(wù)器從訂閱列表中移除該客戶端的訂閱數(shù)據(jù)。
[0113]實(shí)施例三
[0114]參考圖4,圖4是本發(fā)明實(shí)施例更新數(shù)據(jù)的方法第三實(shí)施例的流程示意圖。所述更新數(shù)據(jù)的方法包括:
[0115]步驟401,接收服務(wù)器發(fā)送的更新數(shù)據(jù)的通知信息,所述更新數(shù)據(jù)的通知信息包括更新后的所述數(shù)據(jù)的新位置序號(hào)、更新前的所述數(shù)據(jù)的丨日位置序號(hào)和新數(shù)據(jù)值;
[0116]具體的,服務(wù)器端始終保持整個(gè)數(shù)據(jù)是有序的。單項(xiàng)數(shù)據(jù)為一個(gè)更新單元,每個(gè)更新單元都有一個(gè)唯一的ID進(jìn)行標(biāo)識(shí)。每個(gè)數(shù)據(jù)單元可包含多個(gè)數(shù)據(jù),每個(gè)數(shù)據(jù)定義不同的類型加以區(qū)分,其中數(shù)據(jù)單元所在的位置變化采用{rank,新值,舊值}格式,其余數(shù)據(jù)的變化采用{類型,新值}的格式。
[0117]服務(wù)器上的數(shù)據(jù)有變化時(shí),服務(wù)器都會(huì)發(fā)送一條通知給訂閱了的所有客戶端,每條通知只包含