本發(fā)明屬于互聯(lián)網(wǎng)通信技術(shù)領(lǐng)域,特別涉及一種實(shí)現(xiàn)網(wǎng)絡(luò)管理的用戶狀態(tài)監(jiān)測(cè)及查詢方法。
背景技術(shù):
目前,隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,依賴于Internet辦公越來(lái)越多,為了文件攜帶方便,各類網(wǎng)絡(luò)文檔管理系統(tǒng)層出不窮,人們不再局限于只將文件存放在各自的終端電腦內(nèi)。為了提高企業(yè)(單位)員工的工作效率和信息安全,大部分企業(yè)(單位)都對(duì)員工的辦公文件進(jìn)行一定的管控,不可避免的會(huì)需要將企業(yè)的員工對(duì)應(yīng)成網(wǎng)絡(luò)管理系統(tǒng)的一個(gè)賬號(hào)。
我們常用的大多數(shù)文檔管理系統(tǒng)由客戶端、服務(wù)器、控制臺(tái)三部分組成,它們之間往往會(huì)兩兩進(jìn)行通信。通常,客戶端想要訪問(wèn)服務(wù)器都是用專用的用戶名密碼登錄到服務(wù)器,同時(shí),管理員通過(guò)控制臺(tái)管理員工對(duì)于賬號(hào)的操作使用以及了解一些當(dāng)前客戶端的登錄情況和狀態(tài)。
目前對(duì)用戶狀態(tài)的監(jiān)測(cè)是為服務(wù)器用戶對(duì)象設(shè)置狀態(tài)屬性,通過(guò)狀態(tài)屬性的值標(biāo)示用戶的不同登錄狀態(tài),同時(shí)創(chuàng)建Map集合類,key值為token(網(wǎng)絡(luò)令牌:字符串),value為用戶名,通過(guò)登錄的時(shí)候?qū)⑿畔?xiě)入Map,判斷時(shí)通過(guò)遍歷Map判斷該用戶是否登錄。
這種監(jiān)測(cè)方法具有以下缺陷:
(1)此方法需要依賴實(shí)時(shí)維護(hù)查找數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行用戶狀態(tài)的變更。
(2)此方法不夠快速,當(dāng)服務(wù)器需要判斷當(dāng)前用戶是否已經(jīng)登錄的時(shí)候,因?yàn)閗ey值為token,這個(gè)值是登錄成功后生成的唯一標(biāo)示符號(hào),value可能出現(xiàn)相同的用戶名,查找某用戶是否已經(jīng)登錄時(shí)不能通過(guò)key快速查找,只能全部遍歷Map集合的value進(jìn)行判斷。
類似于一些常用的聊天軟件,通常用戶的狀態(tài)基本包括在線、離線、忙碌等。為了實(shí)時(shí)的標(biāo)示或者變更用戶或客戶端的某種狀態(tài),所以,服務(wù)器傳遞給客戶端的信息是舉足輕重的。由于服務(wù)器運(yùn)行過(guò)程中能夠利用的內(nèi)存資源有限,以及網(wǎng)絡(luò)通信過(guò)程中可能存在的信息丟失問(wèn)題,我們應(yīng)該盡可能的避免服務(wù)器對(duì)于系統(tǒng)內(nèi)存的過(guò)多占用。針對(duì)日新月異的計(jì)算機(jī)技術(shù)發(fā)展,有時(shí)候客戶端的網(wǎng)絡(luò)環(huán)境是多變的,訪問(wèn)的服務(wù)器方式多樣,這時(shí)候服務(wù)器為了識(shí)別客戶端的不同意圖,就需要定義許多通信接口,客戶端在調(diào)用這些接口的時(shí)候傳遞的信息應(yīng)該盡可能的精簡(jiǎn)。
其次,判斷當(dāng)前用戶或客戶端是否在線需要更高的效率,以往的通過(guò)遍歷進(jìn)行判斷的方法在用戶數(shù)極大的情況下顯然是不高效的。這時(shí),服務(wù)器必不可少的需要準(zhǔn)確判斷某個(gè)用戶當(dāng)前狀態(tài)類型更加高效的方法,并在一定程度上管控賬號(hào)登錄的唯一性。
為了滿足這些要求,我們需要盡可能的優(yōu)化對(duì)服務(wù)器內(nèi)存的使用,同時(shí)靈活的配置,不依賴于對(duì)象網(wǎng)絡(luò)環(huán)境的一種通用解決方法,本案由此產(chǎn)生。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的,在于提供一種網(wǎng)絡(luò)用戶狀態(tài)的監(jiān)測(cè)及查詢方法,其可提高用戶狀態(tài)查詢的速度,減小服務(wù)器內(nèi)存的占用空間。
為了達(dá)成上述目的,本發(fā)明的解決方案是:
一種網(wǎng)絡(luò)用戶狀態(tài)的監(jiān)測(cè)方法,包括如下步驟:
步驟a1,在服務(wù)器內(nèi)存中定義長(zhǎng)度為L(zhǎng)的二維標(biāo)示數(shù)組status[][],其中,L設(shè)定為大于預(yù)期的網(wǎng)絡(luò)用戶數(shù)量,將標(biāo)示數(shù)組status[][]的單元值初始化為0,單位bit;
步驟a2,在數(shù)據(jù)庫(kù)表中,為每個(gè)用戶分配一個(gè)唯一的整數(shù)型用戶編號(hào)uid,同時(shí)定義整數(shù)型訪問(wèn)屬性sid的n個(gè)屬性狀態(tài),并將第i個(gè)屬性狀態(tài)設(shè)定為用戶是否在線,為用戶主狀態(tài),其余n-1個(gè)屬性狀態(tài)為次狀態(tài),0≤i≤n-1;
步驟a3,用戶登錄時(shí),設(shè)定status[uid][i]=1,并根據(jù)用戶的實(shí)際情況設(shè)定其余n-1個(gè)屬性狀態(tài)對(duì)應(yīng)的標(biāo)示數(shù)組status[uid][sid]的單元值;
步驟a4,用戶退出登錄時(shí),將對(duì)應(yīng)的status[uid][0]~status[uid][n-1]的單元值全部還原為0。
上述步驟a2中,在為用戶分配用戶編號(hào)uid時(shí),從1開(kāi)始遞增。
上述步驟a3中,在用戶登錄狀態(tài)下,當(dāng)用戶改變某個(gè)次狀態(tài)時(shí),將所有次狀態(tài)中除改變的次狀態(tài)外的其它狀態(tài)對(duì)應(yīng)的單元值先還原為0,再根據(jù)實(shí)際情況進(jìn)行設(shè)置。
一種網(wǎng)絡(luò)用戶狀態(tài)的查詢方法,包括如下步驟:
步驟b1,在數(shù)據(jù)庫(kù)表中查詢用戶的uid,進(jìn)而調(diào)取對(duì)應(yīng)的標(biāo)示數(shù)組status[uid][sid];
步驟b2,根據(jù)status[uid][0]~status[uid][n-1]的單元值,判斷用戶的所有屬性狀態(tài)。
上述步驟b2中,首先判斷用戶uid對(duì)應(yīng)的標(biāo)示數(shù)組status[uid][i]是否為1,只有當(dāng)status[uid][i]=1時(shí),才繼續(xù)判斷其它屬性狀態(tài)對(duì)應(yīng)的標(biāo)示數(shù)組status[uid][sid]的單元值,獲知用戶的所有屬性狀態(tài)。
采用上述方案后,本發(fā)明具有以下特點(diǎn):
(1)在系統(tǒng)平臺(tái)上,服務(wù)器根據(jù)已有的用戶標(biāo)示來(lái)關(guān)聯(lián)管理用戶的其他屬性狀態(tài),二進(jìn)制表示信息易于機(jī)器的理解與識(shí)別;
(2)本發(fā)明具有準(zhǔn)確性,可以快速查找某用戶的狀態(tài),同時(shí)保證用戶登錄的唯一性;
(3)本發(fā)明具有簡(jiǎn)易性,表現(xiàn)在:數(shù)組操作方便易懂,因?yàn)槭莃it數(shù)組,所以理論上極不占用空間內(nèi)存;
(4)本發(fā)明兼容性比較高,對(duì)于不同的編程語(yǔ)言平臺(tái)均可適用,且二進(jìn)制數(shù)據(jù)易于保存?zhèn)鬟f。
附圖說(shuō)明
圖1是本發(fā)明的流程圖。
具體實(shí)施方式
以下將結(jié)合附圖,對(duì)本發(fā)明的技術(shù)方案及有益效果進(jìn)行詳細(xì)說(shuō)明。
如圖1所示,本發(fā)明提供一種網(wǎng)絡(luò)用戶狀態(tài)的監(jiān)測(cè)方法,包括如下步驟:
步驟a1,在服務(wù)器內(nèi)存中定義長(zhǎng)度為L(zhǎng)的bit位二維標(biāo)示數(shù)組status[][],其中,L設(shè)定為大于預(yù)期的網(wǎng)絡(luò)用戶數(shù)量,以滿足所有用戶登錄服務(wù)器時(shí)的需求;將標(biāo)示數(shù)組status[][]的單元值初始化為0(單位bit),采用計(jì)算機(jī)的最小單位bit,可以最大限度地減小對(duì)內(nèi)存的占用;
步驟a2,在數(shù)據(jù)庫(kù)表中,為每個(gè)用戶分配一個(gè)唯一的整數(shù)型用戶編號(hào)uid,在實(shí)際操作中可以從1開(kāi)始順序增加,同時(shí)定義整數(shù)型訪問(wèn)屬性sid,sid具有0~n-1共n個(gè)屬性狀態(tài),例如,sid為0對(duì)應(yīng)是否在線(主狀態(tài)),sid為1對(duì)應(yīng)是否異常(次狀態(tài)),sid為2對(duì)應(yīng)是否忙碌(次狀態(tài))等;
步驟a3,當(dāng)服務(wù)器獲知某個(gè)用戶已經(jīng)登錄,在數(shù)據(jù)庫(kù)表中根據(jù)該用戶的編號(hào)uid,設(shè)定對(duì)應(yīng)的訪問(wèn)屬性sid,并將sid設(shè)定為0,同時(shí)將對(duì)應(yīng)的標(biāo)示數(shù)組status[][]的單元值設(shè)為1,標(biāo)示該用戶已登錄;
步驟a4,在標(biāo)示數(shù)組status[uid][0]=1,用戶在線的情況下,才會(huì)繼續(xù)判斷其它屬性狀態(tài)的標(biāo)示數(shù)組status[uid][sid]的單元值是否為1,為1則表示用戶處于對(duì)應(yīng)的屬性狀態(tài),為0則表示不在該屬性狀態(tài);例如,在步驟a2的定義條件下,若status[uid][1]=1,表示用戶異常,若status[uid][1]=0,表示用戶正常;在具體實(shí)現(xiàn)時(shí),當(dāng)某個(gè)用戶狀態(tài)變更時(shí),主動(dòng)向服務(wù)器發(fā)出變更通知,同時(shí),服務(wù)器定期掃描用戶狀態(tài),從而確保用戶狀態(tài)的正確性;
在用戶登錄狀態(tài)下,當(dāng)用戶改變某個(gè)次狀態(tài)時(shí),將status[uid][1]~status[uid][n-1]中除改變的次狀態(tài)外的其它狀態(tài)先還原為0,然后再將需要的狀態(tài)對(duì)應(yīng)設(shè)置為1,從而提高效率。
步驟a5,用戶退出登錄時(shí),將對(duì)應(yīng)的status[uid][0]~status[uid][n-1]的值全部還原為0。
本發(fā)明還提供一種網(wǎng)絡(luò)用戶狀態(tài)的查詢方法,包括如下步驟:
步驟b1,在數(shù)據(jù)庫(kù)表中查詢用戶的uid,進(jìn)而調(diào)取對(duì)應(yīng)的標(biāo)示數(shù)組status[uid][sid];
步驟b2,判斷status[uid][0]的單元值是否為1,若為1,表示用戶處在登錄狀態(tài),則轉(zhuǎn)步驟b3,否則用戶不在線,結(jié)束查詢;
步驟b3,進(jìn)一步判斷status[uid][1]~status[uid][n-1]的單元值,獲知用戶的所有屬性狀態(tài)。
以上實(shí)施例僅為說(shuō)明本發(fā)明的技術(shù)思想,不能以此限定本發(fā)明的保護(hù)范圍,凡是按照本發(fā)明提出的技術(shù)思想,在技術(shù)方案基礎(chǔ)上所做的任何改動(dòng),均落入本發(fā)明保護(hù)范圍之內(nèi)。