本發(fā)明屬于信息處理領(lǐng)域,尤其涉及一種用戶的實時狀態(tài)檢測方法及系統(tǒng)。
背景技術(shù):
隨著iptv(internetprotocoltelevision,網(wǎng)路協(xié)議電視)的廣泛普及,iptv的用戶數(shù)量不斷增加。為了更好地改善和提高iptv的服務(wù)質(zhì)量,為用戶提供更有價值的服務(wù),對于服務(wù)提供商而言,需要先對用戶的行為數(shù)據(jù)進行采集和分析,從而能夠?qū)ν馓峁┐笠?guī)模用戶實時狀態(tài)信息的查詢功能。用戶實時狀態(tài)包括在線狀態(tài)以及離線狀態(tài),其中,對用戶實時狀態(tài)的檢測和分析又是行為數(shù)據(jù)分析過程中的一大重點和難點。
現(xiàn)有的iptv用戶實時狀態(tài)檢測系統(tǒng)主要用于把描述了用戶實時狀態(tài)的數(shù)據(jù)保存在傳統(tǒng)的關(guān)系數(shù)據(jù)庫中,即,通過直接對關(guān)系數(shù)據(jù)庫執(zhí)行讀寫操作,更新當前存儲的用戶實時狀態(tài)的數(shù)據(jù)。然而,在這種處理方式中,數(shù)據(jù)庫不但要負責大量實時存儲用戶消息的任務(wù),還要負責大量的用戶實時狀態(tài)查詢?nèi)蝿?wù),因此會為數(shù)據(jù)庫帶來巨大的壓力。
綜上所述,現(xiàn)有用戶的實時狀態(tài)檢測方法存在數(shù)據(jù)庫讀寫壓力過大的問題。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種用戶的實時狀態(tài)檢測方法及系統(tǒng),旨在解決現(xiàn)有的用戶的實時狀態(tài)檢測方法中,存在數(shù)據(jù)庫讀寫壓力過大的問題。
本發(fā)明實施例是這樣實現(xiàn)的,一種用戶的實時狀態(tài)檢測方法,包括:
消息采集模塊接收機頂盒模塊發(fā)出的用戶心跳消息,并將所述用戶心跳消息存儲至第一消息隊列;
第一處理模塊以固定的第一時間間隔獲取所述第一消息隊列中的所述用戶心跳消息,并將所述用戶心跳消息從所述第一消息隊列中移除;
所述第一處理模塊分別判斷每條所述用戶心跳消息在所述第一消息隊列中的生存時間是否超過預(yù)設(shè)閾值;
當所述用戶心跳消息在所述第一消息隊列中的生存時間未超過預(yù)設(shè)閾值時,所述第一處理模塊將該條用戶心跳消息重新存儲至所述第一消息隊列;
當所述用戶心跳消息在所述第一消息隊列中的生存時間超過預(yù)設(shè)閾值時,所述第一處理模塊在狀態(tài)緩存中將該條用戶心跳消息對應(yīng)的用戶的實時狀態(tài)更新為離線狀態(tài),以在接收到關(guān)于所述用戶的實時狀態(tài)查詢指令時,從所述狀態(tài)緩存中檢測出所述用戶的實時狀態(tài)。
本發(fā)明實施例的另一目的在于提供一種用戶的實時狀態(tài)檢測系統(tǒng),包括消息采集模塊、機頂盒模塊、第一處理模塊、第一消息隊列以及狀態(tài)緩存,
所述消息采集模塊用于接收機頂盒模塊發(fā)出的用戶心跳消息,并將所述用戶心跳消息存儲至第一消息隊列;
所述第一處理模塊用于以固定的第一時間間隔獲取所述第一消息隊列中的所述用戶心跳消息,并將所述用戶心跳消息從所述第一消息隊列中移除;
所述第一處理模塊還用于分別判斷每條所述用戶心跳消息在所述第一消息隊列中的生存時間是否超過預(yù)設(shè)閾值;
當所述用戶心跳消息在所述第一消息隊列中的生存時間未超過預(yù)設(shè)閾值時,所述第一處理模塊還用于將該條用戶心跳消息重新存儲至所述第一消息隊列;
當所述用戶心跳消息在所述第一消息隊列中的生存時間超過預(yù)設(shè)閾值時,所述第一處理模塊還用于在狀態(tài)緩存中將該條用戶心跳消息對應(yīng)的用戶的實時狀態(tài)更新為離線狀態(tài),以在接收到關(guān)于所述用戶的實時狀態(tài)查詢指令時,從所述狀態(tài)緩存中檢測出所述用戶的實時狀態(tài)。
本發(fā)明實施例中,通過在狀態(tài)緩存中記錄用戶的實時狀態(tài),能夠?qū)⒆x取和存儲用戶實時狀態(tài)數(shù)據(jù)的壓力從數(shù)據(jù)庫轉(zhuǎn)移至緩存中,使得管理員在查詢某個用戶的實時狀態(tài)時,只需從緩存中讀取數(shù)據(jù),因此,提高了非關(guān)系型用戶實時狀態(tài)數(shù)據(jù)的讀取效率,也避免了數(shù)據(jù)庫讀寫壓力過大的問題產(chǎn)生?;诟鱾€模塊來對實時狀態(tài)數(shù)據(jù)進行處理,保證了所有數(shù)據(jù)都能夠分布在一臺服務(wù)器,故不會受到數(shù)據(jù)存儲結(jié)構(gòu)的限制,提高了對大批量數(shù)據(jù)的處理性能。通過單獨對第一消息隊列中的用戶心跳消息進行處理,且第一消息隊列中存儲的用戶心跳消息總量不斷在調(diào)整,保證了在判斷用戶的實時狀態(tài)時,無須每次都讀取來源同一用戶的所有心跳消息,且僅有在用戶心跳消息超時時才將該用戶的實時狀態(tài)更新為離線狀態(tài),因而降低了用戶的離線狀態(tài)檢測難度,由此也提高了系統(tǒng)的穩(wěn)定性和可靠性。
附圖說明
圖1是本發(fā)明實施例提供的用戶的實時狀態(tài)檢測方法所適用的系統(tǒng)架構(gòu)圖;
圖2是本發(fā)明實施例提供的用戶的實時狀態(tài)檢測方法的實現(xiàn)流程圖;
圖3是本發(fā)明另一實施例提供的用戶的實時狀態(tài)檢測方法的實現(xiàn)流程圖;
圖4是本發(fā)明另一實施例提供的用戶的實時狀態(tài)檢測方法所適用的系統(tǒng)架構(gòu)圖;
圖5是本發(fā)明實施例提供的用戶的實時狀態(tài)檢測方法s101的具體實現(xiàn)流程圖;
圖6是本發(fā)明實施例提供的用戶的實時狀態(tài)檢測系統(tǒng)的結(jié)構(gòu)框圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
在本發(fā)明實施例中,用戶的實時狀態(tài)包括在線狀態(tài)以及離線狀態(tài),用戶的實時狀態(tài)數(shù)據(jù)包括用戶的實時狀態(tài)、用戶當前觀看的節(jié)目信息、用戶當前觀看的頻道信息、觀看時間以及用戶的基本賬號信息等與用戶所使用的iptv相關(guān)的所有數(shù)據(jù),在此不作限定。
圖1示出了本發(fā)明實施例提供的用戶的實時狀態(tài)檢測方法所適用的系統(tǒng)架構(gòu)圖,為了便于說明,僅示出了與本實施例相關(guān)的部分。
參照圖1,該系統(tǒng)由多個機頂盒模塊11、消息采集模塊12、第一消息隊列13、第一處理模塊14以及狀態(tài)緩存15組成,其中,機頂盒模塊11可位于iptv機頂盒內(nèi)部,用于根據(jù)預(yù)存儲的策略,對當前用戶正在收看的節(jié)目信息、頻道信息和用戶的基本信息進行采集及管理,并用于生成用戶心跳消息,從而將獲取得到的上述各類實時狀態(tài)數(shù)據(jù)通過有線或無線網(wǎng)絡(luò)發(fā)送至消息采集模塊12,以告知消息采集模塊12當前用戶處于怎樣的狀態(tài)之中。
在該系統(tǒng)中,消息采集模塊12用于接收機頂盒模塊11發(fā)出的各類實時狀態(tài)數(shù)據(jù),并將其中的用戶心跳消息暫存于第一消息隊列13中,以使第一處理模塊14能夠從該第一消息隊列13中讀取出最新時刻的用戶心跳消息,從而根據(jù)用戶心跳消息的生存時間,判斷出對應(yīng)的哪些用戶正處于在線狀態(tài)或離線狀態(tài),并在狀態(tài)緩存15中實現(xiàn)對用戶實時狀態(tài)的更新或修改。
圖2示出了本發(fā)明實施例提供的用戶的實時狀態(tài)檢測方法的實現(xiàn)流程,詳述如下:
在s201中,消息采集模塊接收機頂盒模塊發(fā)出的用戶心跳消息,并將所述用戶心跳消息存儲至第一消息隊列。
本實施例中,機頂盒實現(xiàn)了將用戶所使用的iptv電視機與外部信號源相連,機頂盒模塊位于iptv機頂盒的內(nèi)部。其中,用戶可利用iptv賬號和密碼,在機頂盒所提供的操作界面中執(zhí)行登錄,以獲取與iptv賬號綁定的節(jié)目觀看權(quán)限以及頻道觀看權(quán)限。當iptv機頂盒開啟后,機頂盒模塊在預(yù)設(shè)的時間間隔到達時,生成用戶心跳消息,例如,一分鐘生成一次用戶心跳消息,并將攜帶有iptv賬號的該條用戶心跳信息發(fā)送至遠程服務(wù)器內(nèi)部的消息采集模塊中;換句話說,當iptv機頂盒關(guān)閉后,機頂盒模塊將停止運行,由于此時無法生成用戶心跳消息,因此,消息采集模塊將不會接收到最新時刻下基于該iptv賬號的用戶心跳消息。
此外,當iptv機頂盒開啟后,用戶通過遙控器來選擇自己所需的信號源、播放平臺以及選擇自己所需觀看的頻道、節(jié)目時,上述機頂盒模塊能夠檢測出用戶所選擇的具體內(nèi)容,并將該具體內(nèi)容與其檢測到的iptv賬號共同作為上述用戶心跳消息中,從而發(fā)送至遠程的消息采集模塊。
特別地,僅在接收到切換指令,以改變當前所播放的節(jié)目或頻道時,機頂盒模塊才再次采集當前時刻的用戶實時狀態(tài)數(shù)據(jù);或者,按照預(yù)設(shè)的時間間隔檢測當前時刻的播放內(nèi)容時,若播放頻道或者播放節(jié)目未發(fā)生改變,則機頂盒模塊無須再次采集當前時刻的用戶實時狀態(tài)數(shù)據(jù)。
本實施例中,消息采集模塊將各個機頂盒模塊發(fā)送過來的基于不同用戶的用戶心跳消息存儲至預(yù)先建立的第一消息隊列中。
在s202中,第一處理模塊以固定的第一時間間隔獲取所述第一消息隊列中的所述用戶心跳消息,并將所述用戶心跳消息從所述第一消息隊列中移除。
系統(tǒng)中的第一處理模塊批量讀取當前已累積存儲于該隊列中的各條用戶心跳消息,即,將第一消息隊列中的用戶心跳消息轉(zhuǎn)移至第一處理模塊內(nèi)部,且在第一消息隊列中清空當前已被讀取的每一條用戶心跳消息。
由于消息采集模塊會接收到不同時刻下不同機頂盒模塊上傳的用戶心跳消息,因此,當?shù)谝幌㈥犃兄械挠脩粜奶⒈磺蹇蘸?,也會再次累積有最新時刻下的各條用戶心跳消息,故第一處理模塊將會保持固定的時間間隔不斷讀取第一消息隊列中最新的用戶心跳消息。
例如,第一處理模塊每隔2秒將執(zhí)行一次用戶心跳消息獲取操作,則第一處理模塊將會得到這2秒之內(nèi)才存儲于第一消息隊列中的各條用戶心跳消息。
在s203中,所述第一處理模塊分別判斷每條所述用戶心跳消息在所述第一消息隊列中的生存時間是否超過預(yù)設(shè)閾值。
本實施例中,某條用戶心跳消息的生存時間是指該用戶心跳消息進入第一消息隊列中的時長,即存儲時長。第一處理模塊在讀取用戶心跳消息并將用戶心跳消息從所述第一消息隊列中移除之前,先分別獲取每條用戶心跳消息在第一消息隊列中的生存時間。根據(jù)系統(tǒng)內(nèi)部預(yù)設(shè)的時長閾值,第一處理模塊能夠識別出每一條用戶心跳消息的生存時間是否超過了該時長閾值。
在s204中,當所述用戶心跳消息在所述第一消息隊列中的生存時間未超過預(yù)設(shè)閾值時,所述第一處理模塊將該條用戶心跳消息重新存儲至所述第一消息隊列。
對于某條用戶心跳消息而言,當該用戶心跳消息被第一處理模塊讀取并處理后,第一消息隊列中已不再存儲有該條用戶心跳消息。此時,若經(jīng)過分析得知該條用戶心跳消息在第一消息隊列中的生存時間未超過預(yù)設(shè)的閾值時長,則第一處理模塊會再次在第一消息隊列中寫入該條用戶心跳消息,且該條用戶心跳消息的存儲時刻保持與第一次進入第一消息隊列時的存儲時刻相同。將未超時的用戶心跳消息再次進行存儲,表示該條用戶心跳消息所對應(yīng)的用戶依然處于在線狀態(tài)。由此可知,存在于第一消息隊列中各條用戶心跳消息所對應(yīng)的用戶的實時狀態(tài)都被判定為在線狀態(tài)。
優(yōu)選地,在s204中,當所述用戶心跳消息在所述第一消息隊列中的生存時間未超過預(yù)設(shè)閾值時,所述方法還包括:
所述第一處理模塊將該條用戶心跳消息中的實時收視信息存儲至所述狀態(tài)緩存中,以更新所述用戶在所述狀態(tài)緩存中對應(yīng)的歷史收視信息
本實施例中,狀態(tài)緩存是數(shù)據(jù)交換的緩沖區(qū),該緩沖區(qū)中存儲了用戶最新的實時狀態(tài)數(shù)據(jù),包含但不限于各個用戶的實時狀態(tài)、iptv賬號信息、用戶收視對象以及用戶心跳消息的接收時間等信息,這些信息都是用戶實時狀態(tài)檢測系統(tǒng)最終所需要生成的緩存數(shù)據(jù)。
當基于生存時間來判斷某條用戶心跳消息所對應(yīng)的用戶仍處于在線狀態(tài)時,由于用戶心跳消息中攜帶有上述信號源、播放平臺、收看頻道以及收看節(jié)目等內(nèi)容,因而除了將該其用戶心跳消息再次寫入第一消息隊列,還會在狀態(tài)緩存中更新該用戶的歷史收視信息,使得歷史收視信息中的內(nèi)容為用戶心跳消息所攜帶的具體內(nèi)容,以保證狀態(tài)緩存能夠具有最實時以及最準確的用戶實時狀態(tài)數(shù)據(jù)。
在s205中,當所述用戶心跳消息在所述第一消息隊列中的生存時間超過預(yù)設(shè)閾值時,所述第一處理模塊在狀態(tài)緩存中將該條用戶心跳消息對應(yīng)的用戶的實時狀態(tài)更新為離線狀態(tài),以在接收到關(guān)于所述用戶的實時狀態(tài)查詢指令時,從所述狀態(tài)緩存中檢測出所述用戶的實時狀態(tài)。
當?shù)谝惶幚砟K識別到某條用戶心跳消息在第一消息隊列中的生存時間超過了預(yù)設(shè)的時長閾值時,第一處理模塊將會在狀態(tài)緩存中找到該條用戶心跳消息所對應(yīng)的用戶的實時狀態(tài)記錄,并將其更新為離線狀態(tài),用以表示已太長時間未接收到該用戶的心跳信息,因而判定該用戶已下線。
作為本發(fā)明的一個實施例,上述s205具體如下:
當所述用戶心跳消息在所述第一消息隊列中的生存時間超過預(yù)設(shè)閾值時,所述第一處理模塊分別在狀態(tài)緩存以及在收視對象數(shù)據(jù)庫中將該條用戶心跳消息對應(yīng)的用戶的實時狀態(tài)更新為離線狀態(tài)。
本發(fā)明實施例中,收視對象數(shù)據(jù)庫為關(guān)系型數(shù)據(jù)庫,用于存儲每個用戶的收視狀態(tài)信息。其中,收視狀態(tài)信息包括當前收看對象、收視開始時間以及用戶的實時狀態(tài)等信息,且收視對象具體為收看節(jié)目以及收看頻道。收視對象數(shù)據(jù)庫為其他外部系統(tǒng)提供了收視狀態(tài)信息的匯總查詢服務(wù),使得其他系統(tǒng)能夠調(diào)用該收視對象數(shù)據(jù)庫中的具體數(shù)據(jù),從而基于對該數(shù)據(jù)的分析來提供更好的iptv服務(wù)。
例如,外部系統(tǒng)可在收視對象數(shù)據(jù)庫中快速查詢到當前正在收看a節(jié)目的所有用戶名單,而無需再到上述狀態(tài)緩存中輪詢每個用戶對應(yīng)的歷史收看節(jié)目后,再判斷出收看a節(jié)目的所有用戶有哪些。
當狀態(tài)緩存中某個用戶的實時狀態(tài)更新為離線狀態(tài)時,收視對象數(shù)據(jù)庫中該用戶的實時狀態(tài)也一并更新為離線狀態(tài),用以確定用戶的實時狀態(tài)已發(fā)生了改變,因而需要實時記錄至收視對象數(shù)據(jù)庫中,同時也保持了狀態(tài)緩存與收視對象數(shù)據(jù)庫中實時狀態(tài)數(shù)據(jù)的同步,避免出現(xiàn)兩邊信息不一致而導(dǎo)致數(shù)據(jù)混亂以及降低系統(tǒng)可靠性的問題。
特別地,當系統(tǒng)接收到關(guān)于某一用戶的實時狀態(tài)查詢指令時,系統(tǒng)或者系統(tǒng)內(nèi)部的第三處理模塊將會從所述狀態(tài)緩存中檢測出該用戶的實時狀態(tài),并將該實時狀態(tài)返回至發(fā)出實時狀態(tài)查詢指令的請求用戶。
本發(fā)明實施例中,通過在狀態(tài)緩存中記錄用戶的實時狀態(tài),能夠?qū)⒆x取和存儲用戶實時狀態(tài)數(shù)據(jù)的壓力從數(shù)據(jù)庫轉(zhuǎn)移至緩存中,使得管理員在查詢某個用戶的實時狀態(tài)時,只需從緩存中讀取數(shù)據(jù),因此,提高了非關(guān)系型用戶實時狀態(tài)數(shù)據(jù)的讀取效率,也避免了數(shù)據(jù)庫讀寫壓力過大的問題產(chǎn)生?;诟鱾€模塊來對實時狀態(tài)數(shù)據(jù)進行處理,保證了所有數(shù)據(jù)都能夠分布在一臺服務(wù)器,故不會受到數(shù)據(jù)存儲結(jié)構(gòu)的限制,提高了對大批量數(shù)據(jù)的處理性能。通過單獨對第一消息隊列中的用戶心跳消息進行處理,且第一消息隊列中存儲的用戶心跳消息總量不斷在調(diào)整,保證了在判斷用戶的實時狀態(tài)時,無須每次都讀取來源同一用戶的所有心跳消息,且僅有在用戶心跳消息超時時才將該用戶的實時狀態(tài)更新為離線狀態(tài),因而降低了用戶的離線狀態(tài)檢測難度,由此也提高了系統(tǒng)的穩(wěn)定性和可靠性。
作為本發(fā)明的另一實施例,圖3示出了本發(fā)明實施例提供的用戶的實時狀態(tài)檢測方法的實現(xiàn)流程,詳述如下:
在s301中,消息采集模塊接收機頂盒模塊發(fā)出的用戶心跳消息,并將所述用戶心跳消息存儲至第一消息隊列以及第二消息隊列,其中,所述用戶心跳信息包括實時收視信息。
第二消息隊列為系統(tǒng)中預(yù)先建立的除第一消息隊列之外的另一個隊列?;谏鲜鰏101中相同的實現(xiàn)原理,當消息采集模塊采集到各個機頂盒模塊發(fā)出的實時收視信息后,會將實時收視信息分發(fā)到第二消息隊列中。
在s302中,第二處理模塊以固定的第二時間間隔獲取所述第二消息隊列中的所述實時收視信息。
每條實時收視信息的屬性中記錄了該條信息的存儲時刻。第二處理模塊保持固定的時間間隔讀取第二消息隊列中的實時收視信息,在一次讀取過程中,僅讀取存儲時刻與當前系統(tǒng)時間的差值在預(yù)設(shè)時長范圍內(nèi)的一條或多條實時收視信息。
例如,第二處理模塊每隔2秒將執(zhí)行一次實時收視信息的獲取操作,則第二處理模塊將會得到最近2秒內(nèi)才存儲于第二消息隊列中的各條實時收視信息。
在s303中,所述第二處理模塊在所述狀態(tài)緩存中獲取所述用戶的所述歷史收視信息,并判斷所述歷史收視信息與所述實時收視信息是否相同。
第二處理模塊讀取到第二消息隊列中的各條最新的實時收視信息后,在狀態(tài)緩存中獲取每條實時收視信息所對應(yīng)的用戶的歷史收視信息。第二處理模塊將屬于同一用戶的兩組數(shù)據(jù)進行比較,從而可以判斷出最新時刻讀取到的該用戶的實時收視對象相對于較前時刻存儲于狀態(tài)緩存中的該用戶的收視對象來說,在當前時刻之下是否發(fā)生了變化。
例如,狀態(tài)緩存中用戶a的歷史收視信息中記錄了其當前收看對象為節(jié)目a,而從第二消息隊列中剛剛讀取到的用戶a的收看對象為節(jié)目b,可以得知,用戶a的收視對象在當前時刻下發(fā)生了變化,即用戶a的歷史收視信息與實時收視信息不同。
在s304中,若所述歷史收視信息與所述實時收視信息不同,則所述第二處理模塊在收視對象數(shù)據(jù)庫中將所述用戶的當前收看對象更新為所述實時收視信息中的所述收看對象,并在所述狀態(tài)緩存中將所述用戶的所述歷史收視信息更新為所述實時收視信息。
本實施例中,只有當緩存中的歷史收視信息與實時收視信息有差別時,收視對象數(shù)據(jù)庫中的用戶實時狀態(tài)數(shù)據(jù)才會被寫入以及存儲,而在歷史收視信息與實時收視信息相同時,收視對象數(shù)據(jù)庫無須執(zhí)行數(shù)據(jù)寫入操作。在大部分情況之下,用戶在一段時間內(nèi)會持續(xù)收看相同的一個節(jié)目,因此,第二處理模塊即使在這段時間內(nèi)持續(xù)接收與歷史收視信息相同的某個用戶的用戶心跳消息,也不必每接收到一條該用戶的用戶心跳消息就執(zhí)行一次收視對象更新操作,因而本發(fā)明實施例極大地減輕了數(shù)據(jù)庫的運行壓力,提高了實時狀態(tài)數(shù)據(jù)的檢測效率。
由于第二處理模塊從第二消息隊列中獲取到的實時收視信息為用戶傳送至系統(tǒng)的最新信息,因此,基于該最新的實時收視信息來更新收視對象數(shù)據(jù)庫以及狀態(tài)緩存中的歷史收視信息時,能夠最大程度地記錄存儲用戶當前時刻的真實收看狀態(tài),提高了系統(tǒng)中存儲的用戶實時狀態(tài)數(shù)據(jù)的準確性。
圖4示出了本發(fā)明另一實施例提供的用戶的實時狀態(tài)檢測方法所適用的系統(tǒng)架構(gòu)圖,為了便于說明,僅示出了與本實施例相關(guān)的部分。
參照圖4,該系統(tǒng)由多個機頂盒模塊41、消息采集模塊42、第一消息隊列43、第二消息隊列44、第一處理模塊45、狀態(tài)緩存46、第二處理模塊47以及收視對象數(shù)據(jù)庫48組成。其中,機頂盒模塊41將采集到的用戶心跳消息以及實時收視信息發(fā)送至遠程的消息采集模塊42,消息采集模塊42將接收到的每條用戶心跳信息分發(fā)至第一消息隊列43以及將接收到的每條實時收視信息分發(fā)至第二消息隊列44。
第一處理模塊45以固定的時間間隔從第一消息隊列43中讀取出最新時刻的用戶心跳消息,從而根據(jù)用戶心跳消息的生存時間,判斷出對應(yīng)的哪些用戶正處于離線狀態(tài),并在狀態(tài)緩存46以及在收視對象數(shù)據(jù)庫48中實現(xiàn)對用戶實時狀態(tài)的更新或修改;若某條用戶心跳信息的生存時間尚未超時,則第一處理模塊45將該條用戶心跳信息重新寫入第一消息隊列43中,隨著時間的推移,該用戶心跳信息會達到時長閥值,從而判斷用戶已經(jīng)離線,此時該用戶心跳消息將不會再寫入第一消息隊列中。
第二處理模塊47以固定的時間間隔從第二消息隊列44中讀取出最近的預(yù)設(shè)時長內(nèi)的各條實時收視信息,并在狀態(tài)緩存46中讀取每條實時收視信息所對應(yīng)的用戶的歷史收視信息,從而判斷該用戶的兩條新舊信息是否相同,若不相同,則在狀態(tài)緩存46以及收視對象數(shù)據(jù)庫48中,將該用戶的收視信息進行更新后存儲。
本發(fā)明實施例將用戶離線狀態(tài)檢測的過程與用戶在線狀態(tài)下實時收視信息的處理過程分發(fā)至第一處理模塊以及第二處理模塊來獨立處理,并且兩個模塊所讀取的數(shù)據(jù)信息來源于不同的消息隊列,因此,避免了不同類型數(shù)據(jù)之間的相互影響,通過將實時狀態(tài)數(shù)據(jù)的讀寫壓力留在了狀態(tài)緩存中,減輕了收視對象數(shù)據(jù)庫的存儲壓力。
作為本發(fā)明的又一實施例,如圖5所示,在所述消息采集模塊接收機頂盒發(fā)出的用戶心跳消息之后,在所述將所述用戶心跳消息存儲至第一消息隊列中之前,所述方法還包括:
在s501中,所述消息采集模塊判斷所述第一消息隊列中是否存在與所述用戶心跳消息對應(yīng)同一用戶的另一條用戶心跳消息。
在s502中,當所述第一消息隊列中存在與所述用戶心跳消息對應(yīng)同一用戶的另一條用戶心跳消息時,所述消息采集模塊將所述另一條用戶心跳消息從所述第一消息隊列中移除。
消息采集模塊在持續(xù)不斷接收到各個機頂盒模塊上傳的用戶心跳消息時,在將剛接收到的某條用戶心跳消息準備存入第一消息隊列之前,第一消息隊列之中已包含有之前時刻所存入的其他用戶心跳消息。每條用戶心跳消息標識了其對應(yīng)的用戶,因此,消息采集模塊讀取剛接收到的用戶心跳消息所標識的用戶后,能夠判斷當前第一消息隊列中是否存在標識了相同用戶的一條用戶心跳消息,若是,則將其中已存儲的該用戶的用戶心跳消息從第一消息隊列中移除,保證即將存入第一消息隊列中的用戶心跳消息是該用戶的最新一條用戶心跳消息,從而在后續(xù)判斷該用戶是否離線時,能夠基于其最新的用戶心跳消息來獲取生存時間以及獲取最新的收視信息存入狀態(tài)緩存,提高該用戶實時狀態(tài)的判斷準確性。
應(yīng)理解,在本發(fā)明實施例中,上述各過程的序號的大小并不意味著執(zhí)行順序的先后,各過程的執(zhí)行順序應(yīng)以其功能和內(nèi)在邏輯確定,而不應(yīng)對本發(fā)明實施例的實施過程構(gòu)成任何限定。
圖6示出了本發(fā)明實施例提供的用戶的實時狀態(tài)檢測裝置的結(jié)構(gòu)框圖,該用于運行本發(fā)明圖1至圖5實施例所述的用戶的實時狀態(tài)檢測方法。為了便于說明,僅示出了與本實施例相關(guān)的部分。
參照圖6,該系統(tǒng)包括機頂盒模塊61、消息采集模塊62、第一消息隊列63、第一處理模塊64以及狀態(tài)緩存65,
所述消息采集模塊62用于接收機頂盒模塊61發(fā)出的用戶心跳消息,并將所述用戶心跳消息存儲至第一消息隊列63。
所述第一處理模塊64用于以固定的第一時間間隔獲取所述第一消息隊列63中的所述用戶心跳消息,并將所述用戶心跳消息從所述第一消息隊列63中移除。
所述第一處理模塊64還用于分別判斷每條所述用戶心跳消息在所述第一消息隊列63中的生存時間是否超過預(yù)設(shè)閾值。
當所述用戶心跳消息在所述第一消息隊列63中的生存時間未超過預(yù)設(shè)閾值時,所述第一處理模塊64還用于將該條用戶心跳消息重新存儲至所述第一消息隊列63。
當所述用戶心跳消息在所述第一消息隊列63中的生存時間超過預(yù)設(shè)閾值時,所述第一處理模塊64還用于在狀態(tài)緩存65中將該條用戶心跳消息對應(yīng)的用戶的實時狀態(tài)更新為離線狀態(tài),以在接收到關(guān)于所述用戶的實時狀態(tài)查詢指令時,從所述狀態(tài)緩存65中檢測出所述用戶的實時狀態(tài)。
可選地,所述系統(tǒng)還包括收視對象數(shù)據(jù)庫,當所述用戶心跳消息在所述第一消息隊列63中的生存時間超過預(yù)設(shè)閾值時,所述第一處理模塊64具體用于分別在狀態(tài)緩存65以及在收視對象數(shù)據(jù)庫中將該條用戶心跳消息對應(yīng)的用戶的實時狀態(tài)更新為離線狀態(tài)。
可選地,當所述用戶心跳消息在所述第一消息隊列63中的生存時間未超過預(yù)設(shè)閾值時,所述第一處理模塊64還用于將該條用戶心跳消息中的實時收視信息存儲至所述狀態(tài)緩存65中,以使所述實時收視信息作為所述用戶在所述狀態(tài)緩存65中對應(yīng)的歷史收視信息。
可選地,所述系統(tǒng)還包括第二消息隊列以及第二處理模塊,所述消息采集模塊62還用于接收機頂盒模塊發(fā)出的用戶心跳消息,并將所述用戶心跳消息存儲至第一消息隊列63以及第二消息隊列,其中,所述用戶心跳信息包括實時收視信息;
所述第二處理模塊用于以固定的第二時間間隔獲取所述第二消息隊列中的所述實時收視信息;
所述第二處理模塊還用于在所述狀態(tài)緩存65中獲取所述用戶的所述歷史收視信息,并判斷所述歷史收視信息與所述實時收視信息是否相同;
若所述歷史收視信息與所述實時收視信息不同,則所述第二處理模塊還用于在收視對象數(shù)據(jù)庫中將所述用戶的當前收看對象更新為所述實時收視信息中的所述收看對象,并在所述狀態(tài)緩存65中將所述用戶的所述歷史收視信息更新為所述實時收視信息。
可選地,所述消息采集模塊62還用于判斷所述第一消息隊列63中是否存在與所述用戶心跳消息對應(yīng)同一用戶的另一條用戶心跳消息。
當所述第一消息隊列63中存在與所述用戶心跳消息對應(yīng)同一用戶的另一條用戶心跳消息時,所述消息采集模塊62還用于將所述另一條用戶心跳消息從所述第一消息隊列63中移除。
本領(lǐng)域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計算機軟件和電子硬件的結(jié)合來實現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認為超出本發(fā)明的范圍。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng)、裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上。可以根據(jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。
所述功能如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:u盤、移動硬盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)所述以權(quán)利要求的保護范圍為準。