一種消息處理方法及消息中心系統(tǒng)的制作方法
【專利摘要】本發(fā)明為了克服現(xiàn)有技術(shù)中對于消息轉(zhuǎn)發(fā)分發(fā)處理中面對多線程同步時遇到的不易控制的問題,提供了一種消息處理方法及消息中心系統(tǒng),所述系統(tǒng)包括:任務管理模塊、消息生成模塊、消息注冊模塊、消息打包模塊、消息轉(zhuǎn)發(fā)模塊和消息拆包模塊。本系統(tǒng)簡化了消息傳遞過程中的線程同步問題,且消息內(nèi)容數(shù)量與類型均沒有限制,自由度和靈活度很高。
【專利說明】一種消息處理方法及消息中心系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及消息處理技術(shù),更具體地,涉及一種消息處理方法及消息中心系統(tǒng)。
【背景技術(shù)】
[0002]商業(yè)軟件的開發(fā),大部分都需要有一些為其它模塊提供服務的底層模塊。這些底層模塊由于實現(xiàn)的是一些通用功能,需要同時為幾個高層模塊提供功能,因此通常被設(shè)計成一種基于消息隊列的框架。任何需要訪問這些通用功能的高層模塊,都可以通過發(fā)送消息并接受返回值來得到需要的服務。
[0003]這種構(gòu)架的設(shè)計,一般是圍繞消息隊列來展開的:首先有一個消息隊列,并對外暴露發(fā)送消息的API ;然后實現(xiàn)一個負責維護并調(diào)度該消息隊列的線程,該線程負責維護消息隊列,并分發(fā)消息;最后是一系列處理特定消息的功能模塊。消息由暴露給外層模塊的API發(fā)送到消息隊列,由調(diào)度線程接受消息,并分發(fā)給消息處理模塊,然后由處理模塊對不同消息進行處理,將處理結(jié)果返回給高層模塊,這就是一個完善的基于消息隊列的公用模塊。為了實現(xiàn)這種模塊的可擴展性,消息處理模塊一般采取一種基于注冊的設(shè)計,允許用戶注冊特定消息的消息處理函數(shù)。
[0004]Windows、Macintosh等操作系統(tǒng)都以線程(thread)作為系統(tǒng)的調(diào)度和運行單位,線程是比進程粒度更細的并行機制,它是程序內(nèi)的動態(tài)執(zhí)行流。I個任務內(nèi)可以有多個線程并行運行,它們共享任務的所有資源,如內(nèi)存空間。利用多線程可實現(xiàn)任務內(nèi)的各子任務并行運行,提高事務處理效率。同任務內(nèi)的多線程間可通過全局變量、文件、信號燈等方式實現(xiàn)同步。I個線程使自己處于睡眠(sle印)狀態(tài),等待所需要的事件發(fā)生,并由系統(tǒng)核心喚醒啟動它。雖然此方式能實現(xiàn)同步多線程間的并行運行,但它不符合Windows程序結(jié)構(gòu),Windows系統(tǒng)的程序結(jié)構(gòu)是以消息驅(qū)動方式構(gòu)成的,主程序的消息循環(huán)部分從消息隊列中獲取與本程序有關(guān)的消息,并且送至相應的窗口過程函數(shù),窗口過程函數(shù)負責接受并處理消息。如何在多線程間以消息傳遞方式來同步它們的并行運行,是值得討論的問題。即每個線程都通過獲取消息來驅(qū)動程序的運行,它們之間通過相互傳遞消息實現(xiàn)并行同步。當然實際中,由于對大量數(shù)據(jù)的共享,使得多線程間必須使用信號燈等同步方式來解決互斥問題。本文主要討論關(guān)于多線程下消息處理的線程消息隊列問題,線程管理問題,線程間消息傳遞問題以及所需的數(shù)據(jù)結(jié)構(gòu),最后還給出了線程消息處理模型。
[0005]Linux支持三種進程或線程之間的通信機制:消息隊列、信號燈和共享內(nèi)存。對這些資源的訪問只能通過系統(tǒng)調(diào)用的方式進行。SystemVIPC對象權(quán)限都包含在一個ipcperm數(shù)據(jù)結(jié)構(gòu)中,該結(jié)構(gòu)包含了創(chuàng)建進程的用戶和組標識符、針對這個對象的訪問模式(屬主、組和其他)和IPC對象的key。Linux支持兩種key:公開的和私有的。如果key是公開的,那么任何進程只要通過了權(quán)限檢查,就可以找到對應的系統(tǒng)IPC對象的引用標識符。在/usr/include/linux.1p.h中消息是在ipc/msg.c中實現(xiàn),共享內(nèi)存在ipc/shm.c,信號量在ipc/sem.c,管道在ipc/pipe.c中實現(xiàn)。信號量是一個可以用來控制多個進程或線程存取共享資源的計數(shù)器,經(jīng)常作為一種鎖定機制來防止多進程或多線程之間對臨界資源或共享資源的訪問沖突。目前多線程技術(shù)的發(fā)展已相當成熟,在許多的現(xiàn)代操作系統(tǒng)設(shè)計中均被引用,Linux中也有自己的線程管理機制,對于應用程序開發(fā)來說,使用多線程編程簡化了編程的任務,改進了應用程序的效率。但是多線程之間的同步一直是Linux多線程編程中需要注意的問題。使用信號量原語可以有效地協(xié)調(diào)多線程之間對共享資源的訪問,以保證程序運行結(jié)果的正確性。無疑,這對于編寫Linux下的多線程應用程序有著重要的意義。
[0006]客戶端程序設(shè)計中,隨著軟件復雜度的提升,模塊的劃分越來越明顯,為了盡量降低模塊之間的耦合度,需要一種消息注冊和通知機制。傳統(tǒng)的通知機制通常都是類似于Observer設(shè)計模式,通過函數(shù)回調(diào)來進行通知。
[0007]現(xiàn)有技術(shù)中的上述平臺存在如下的主要缺點:
[0008]1.在比較大規(guī)模的項目中,各種消息可能來自不同的線程,模塊之間的調(diào)用有不同的線程約束規(guī)則,線程同步等問題十分麻煩,容易帶來各種問題;
[0009]2.傳統(tǒng)的消息機制只能通過回調(diào)進行通知,無法將代碼打包,不夠靈活;
[0010]3.傳統(tǒng)的消息機制消息攜帶信息類型和數(shù)量有限。
【發(fā)明內(nèi)容】
[0011]為了克服現(xiàn)有技術(shù)中的上述缺陷和不足,本發(fā)明針對以上需求進行了設(shè)計,實現(xiàn)了一種基于主線程轉(zhuǎn)發(fā)的消息中心系統(tǒng)。簡化消息通知中的現(xiàn)成同步問題,對消息內(nèi)容和類型沒有限制。
[0012]本發(fā)明提供的一種消息中心系統(tǒng),所述消息中心系統(tǒng)包括:
[0013]消息生成模塊,接收到的用戶通過客戶端設(shè)置的消息,得到消息的內(nèi)容,根據(jù)消息內(nèi)容所屬的類型和/或參數(shù),查找對應的模板,并根據(jù)查找到的模板生成消息體;
[0014]消息注冊模塊,根據(jù)所述查找到的模板調(diào)用對應該模板的消息處理子模塊,并向任務管理模塊請求注冊該查找到的模板、所述消息響應模塊以及所述被生成的消息體;
[0015]消息打包模塊,根據(jù)所述查找到的模板對消息體進行打包,得到消息包,所述消息包包括消息體編號和消息內(nèi)容;
[0016]消息轉(zhuǎn)發(fā)模塊,將所述消息包發(fā)送到所述任務管理模塊;
[0017]任務管理模塊,僅對資源進行統(tǒng)一的調(diào)配和管理;所述任務管理模塊還包括消息分發(fā)模塊,由所述任務管理模塊將消息包分發(fā)到已經(jīng)注冊的、與該消息體對應的消息響應模塊;
[0018]消息響應模塊,處理消息包中的消息內(nèi)容。
[0019]進一步地,所述消息生成模塊在查找對應的模板時,根據(jù)所屬的類型和/或參數(shù),在數(shù)據(jù)庫中進行查找。
[0020]進一步地,所述消息響應模塊包括消息拆包模塊,解析所述消息包,獲取消息體編號和消息內(nèi)容。
[0021]進一步地,所述消息中心系統(tǒng)還包括消息回執(zhí)模塊,其向任務管理模塊請求注銷所述查找到的模板、所述消息響應模塊以及所述被生成的消息體。
[0022]進一步地,所述消息中心系統(tǒng)還包括性能服務模塊,與所述消息中心系統(tǒng)的其他模塊相連,對其他模塊進行工作狀態(tài)監(jiān)控和性能調(diào)整。
[0023]進一步地,所述性能服務模塊還監(jiān)控所述消息中心系統(tǒng)的流量和轉(zhuǎn)發(fā)速度。
[0024]根據(jù)本發(fā)明的另一方面,還提供了一種消息處理方法,包括如下步驟:
[0025](I)注冊消息,通過消息中心注冊接口注冊消息響應;
[0026](2)將消息編號與消息內(nèi)容進行打包,形成一個消息包;
[0027](3)將打包好的消息包轉(zhuǎn)發(fā);
[0028](4)分發(fā)消息包;
[0029](5)將打包的消息編號與消息內(nèi)容拆分出來;
[0030](6)根據(jù)消息編號進行處理。
[0031]本發(fā)明的有益效果在于:本發(fā)明的消息中心系統(tǒng)和消息處理方法簡化了消息傳遞過程中的線程同步問題,且消息內(nèi)容數(shù)量與類型均沒有限制,自由度和靈活度很高。
【專利附圖】
【附圖說明】
[0032]圖1示出了根據(jù)本發(fā)明的實施例的消息中心系統(tǒng)的結(jié)構(gòu)框圖;
[0033]圖2示出了根據(jù)本發(fā)明的實施例的消息處理方法的流程圖。
【具體實施方式】
[0034]為了更清楚地描述本發(fā)明的技術(shù)方案,下面,將結(jié)合附圖具體說明 申請人:在根據(jù)本發(fā)明的系統(tǒng)和方法實現(xiàn)的例如酷我音樂PC版的消息中心系統(tǒng)和消息處理方法的實施例。 申請人:在根據(jù)本發(fā)明的系統(tǒng)和方法實現(xiàn)的酷我k歌1s版、酷我音樂android pad版的消息中心系統(tǒng)和消息處理方法與PC版類似,在此不再贅述。
[0035]如圖1所示的實施例中,基于主線程轉(zhuǎn)發(fā)的酷我音樂PC版消息中心系統(tǒng)包括:歌曲選播信息生成模塊1、歌曲選播信息注冊模塊2、歌曲選播信息打包模塊3、歌曲選播信息轉(zhuǎn)發(fā)模塊4、任務管理模塊5、歌曲選播信息響應模塊6。
[0036]歌曲選播信息生成模塊I接收到的用戶通過PC機客戶端(例如,用戶通過PC機訪問因特網(wǎng)的酷我音樂網(wǎng)或者通過下載并使用酷我音樂盒等在PC平臺上任一具有遠程點播功能的音樂播放器)設(shè)置的希望聽到的歌曲的信息,包括歌曲名、歌手、演唱風格、專輯名稱等,根據(jù)所述的歌曲的信息中的演唱風格(例如按照性別劃分的男中音、男低音、男高音、女高音、女中音、女低音等,按照表現(xiàn)特征劃分的抒情女高音、花腔女高音、戲劇女高音等),在PC機客戶端的本地數(shù)據(jù)庫中查找與該演唱風格相對應的風格模板(例如,對應于抒情女聞首的風格I旲板定義了具有“首色明売秀I?,優(yōu)美抒情”特性的歌曲的首調(diào)、頻率、首聞等信息),并根據(jù)查找到的模板生成歌曲選播信息體。該信息體包括PC機客戶端的IP地址和用戶編號、風格模板信息,以及點播時間等。
[0037]在另一個實施例中,對于具有音樂專業(yè)知識的用戶,可以對PC機客戶端提供的音色、演唱者性別、最聞首聞、最低首聞、節(jié)奏、樂器等彳目息的一種或多種彳目息加以選擇和編輯,由該PC機客戶端生成包括這些所選信息的選擇編號,該選擇編號是基于MS SQL的條件查詢語句生成的。例如,當用戶編輯并選擇了包括演唱者性別、最高音高、最低音高和節(jié)奏這4項信息在內(nèi)的信息以后,此時在PC機客戶端的本地數(shù)據(jù)庫中將選取自定義模板,將上述SQL語句添加入空白的自定義模板。必要時,這類語句可以不僅生成一個,相互之間用分號(等間隔。然后,生成包括如下信息的歌曲選播信息體:PC機客戶端的IP地址和用戶編號、所述自定義模板,以及點播時間等。
[0038]歌曲選播信息注冊模塊2根據(jù)所述查找到的模板調(diào)用對應該模板的歌曲選播信息處理子模塊,并向任務管理模塊5請求注冊該查找到的模板、所述歌曲選播信息響應模塊6以及所述被生成的歌曲選播信息體。在一個實施例中,可以將上述注冊的信息定義為一個服務,并調(diào)用RegisterServiceCtrlHandler來注冊服務的控制函數(shù),這里要設(shè)置status.dwControlsAccepted 為 SERVICE_ACCEPT_STOP,以控制這個服務的狀態(tài)。
[0039]歌曲選播信息打包模塊3根據(jù)所述查找到的模板對歌曲選播信息體進行打包,得到歌曲選播信息包,所述歌曲選播信息包包括歌曲選播信息體編號和消息內(nèi)容。在一個實施例中,所述編號是任務管理模塊5賦予的該服務的ID。該信息包在生成過程中,還可以包括校驗信息(例如CRC校驗碼),并通過一定的編碼形式封裝。
[0040]歌曲選播信息轉(zhuǎn)發(fā)模塊4,將所述歌曲選播信息包發(fā)送到所述任務管理模塊5 ;
[0041]任務管理模塊5位于服務器端,該模塊沒有使用定義新線程的方式處理信息轉(zhuǎn)發(fā)的問題,而僅是對服務器端信息中心的主線程的資源進行統(tǒng)一的調(diào)配和管理。
[0042]這樣也就同時避免了采用多線程同步時不得不面對的復雜的控制。
[0043]所述任務管理模塊5還包括歌曲選播信息分發(fā)模塊,由所述任務管理模塊5將歌曲選播信息包分發(fā)到已經(jīng)注冊的、與該歌曲選播信息體對應的歌曲選播信息響應模塊6 ;
[0044]歌曲選播信息響應模塊6處理歌曲選播信息包中的演唱風格內(nèi)容。
[0045]所述歌曲選播信息生成模塊I在查找對應的模板時,根據(jù)所屬的類型和/或參數(shù),在服務器端的數(shù)據(jù)庫中進行查找。當信息體包括的是非自定義模板時,服務器端的數(shù)據(jù)庫按照用戶給定的信息進行標準查找;當信息體包括的是自定義模板時,服務器端的數(shù)據(jù)庫按照用戶給定的信息直接執(zhí)行SQL查找操作。
[0046]在基于上述各實施例的另一個實施例中,所述歌曲選播信息響應模塊6包括歌曲選播信息拆包模塊7,解析所述歌曲選播信息包,獲取歌曲選播信息體編號和消息內(nèi)容。該歌曲選播信息拆包模塊7進行的操作與歌曲選播信息打包模塊3基本相反。
[0047]在基于上述各實施例的另一個實施例中,所述歌曲選播信息中心系統(tǒng)100還包括歌曲選播信息回執(zhí)模塊8,其向任務管理模塊5請求注銷所述查找到的模板、所述歌曲選播信息響應模塊6以及所述被生成的歌曲選播信息體。
[0048]在基于上述各實施例的另一個實施例中,所述歌曲選播信息中心系統(tǒng)100還包括性能服務模塊9,與所述歌曲選播信息中心系統(tǒng)100的其他模塊相連,對其他模塊進行工作狀態(tài)監(jiān)控和性能調(diào)整。出于圖1簡潔清楚的考慮,圖1中沒有標記出該性能服務模塊9。
[0049]在一個實施例中,為了穩(wěn)定地保證消息中心系統(tǒng)更佳的性能,性能服務模塊9定時控制所述消息中心系統(tǒng)的流量和轉(zhuǎn)發(fā)速度,采用JDK中的Timer和TimerTask類實現(xiàn)任務管理模塊5的定時器。在一個優(yōu)選的實施例中,可以將流量控制的相關(guān)協(xié)議和信息保存在配置文件中,通過定時器控制讀取配置文件來控制轉(zhuǎn)發(fā)速度。
[0050]可選擇地,所述性能服務模塊9還監(jiān)控所述歌曲選播信息中心系統(tǒng)100的流量和轉(zhuǎn)發(fā)速度。
[0051]根據(jù)本發(fā)明的另一方面,還提供了一種歌曲選播信息處理方法,包括如下步驟:
[0052](I)注冊歌曲選播信息,通過歌曲選播信息中心注冊接口注冊歌曲選播信息響應;
[0053](2)將歌曲選播信息編號與歌曲選播信息內(nèi)容進行打包,形成一個歌曲選播信息包;
[0054](3)將打包好的歌曲選播信息包轉(zhuǎn)發(fā)到主線程中;
[0055](4)主線程分發(fā)歌曲選播信息包;
[0056](5)將打包的歌曲選播信息編號與歌曲選播信息內(nèi)容拆分出來;
[0057](6)根據(jù)消息編號進行處理。
[0058]在一個實施例中,上述方法可以根據(jù)圖1的系統(tǒng)實現(xiàn)。
[0059]上面以文字和【專利附圖】
【附圖說明】的方式闡釋了本發(fā)明的結(jié)構(gòu)和使用方法,并非詳盡無遺或限制于上述所述具體形式,顯而易見可根據(jù)上面所述進行適當?shù)男薷暮蛢?yōu)化。
【權(quán)利要求】
1.一種消息中心系統(tǒng),其特征在于,所述消息中心系統(tǒng)包括: 消息生成模塊,接收到的用戶通過客戶端設(shè)置的消息,得到消息的內(nèi)容,根據(jù)消息內(nèi)容所屬的類型和/或參數(shù),查找對應的模板,并根據(jù)查找到的模板生成消息體; 消息注冊模塊,根據(jù)所述查找到的模板調(diào)用對應該模板的消息處理子模塊,并向任務管理模塊請求注冊該查找到的模板、所述消息響應模塊以及所述被生成的消息體; 消息打包模塊,根據(jù)所述查找到的模板對消息體進行打包,得到消息包,所述消息包包括消息體編號和消息內(nèi)容; 消息轉(zhuǎn)發(fā)模塊,將所述消息包發(fā)送到所述任務管理模塊; 任務管理模塊,僅對資源進行統(tǒng)一的調(diào)配和管理;所述任務管理模塊還包括消息分發(fā)模塊,由所述任務管理模塊將消息包分發(fā)到已經(jīng)注冊的、與該消息體對應的消息響應模塊; 消息響應模塊,處理消息包中的消息內(nèi)容。
2.根據(jù)權(quán)利要求1所述的消息中心系統(tǒng),其特征在于,所述消息生成模塊在查找對應的模板時,根據(jù)所屬的類型和/或參數(shù),在數(shù)據(jù)庫中進行查找。
3.根據(jù)權(quán)利要求1或2所述的消息中心系統(tǒng),其特征在于,所述消息響應模塊包括消息拆包模塊,解析所述消息包,獲取消息體編號和消息內(nèi)容。
4.根據(jù)權(quán)利要求1或2所述的消息中心系統(tǒng),其特征在于,所述消息中心系統(tǒng)還包括消息回執(zhí)模塊,其向任務管理模塊請求注銷所述查找到的模板、所述消息響應模塊以及所述被生成的消息體。
5.根據(jù)權(quán)利要求1或2所述的消息中心系統(tǒng),其特征在于,所述消息中心系統(tǒng)還包括性能服務模塊,與所述消息中心系統(tǒng)的其他模塊相連,對其他模塊進行工作狀態(tài)監(jiān)控和性能調(diào)整。
6.根據(jù)權(quán)利要求1或2所述的消息中心系統(tǒng),其特征在于,所述性能服務模塊還監(jiān)控所述消息中心系統(tǒng)的流量和轉(zhuǎn)發(fā)速度。
7.一種消息處理方法,其特征在于,包括如下步驟: (1)注冊消息,通過消息中心注冊接口注冊消息響應; (2)將消息編號與消息內(nèi)容進行打包,形成一個消息包; (3)將打包好的消息包轉(zhuǎn)發(fā); (4)分發(fā)消息包; (5)將打包的消息編號與消息內(nèi)容拆分出來; (6)根據(jù)消息編號進行處理。
【文檔編號】G06F17/30GK104243274SQ201310234886
【公開日】2014年12月24日 申請日期:2013年6月14日 優(yōu)先權(quán)日:2013年6月14日
【發(fā)明者】翟海平, 韓治國, 程作漢 申請人:億覽在線網(wǎng)絡(luò)技術(shù)(北京)有限公司