跨平臺(tái)輕量級(jí)事務(wù)處理框架的實(shí)現(xiàn)方法
【專利摘要】本發(fā)明公開了一種跨平臺(tái)輕量級(jí)事務(wù)處理框架的實(shí)現(xiàn)方法,本發(fā)明的方法在設(shè)計(jì)上加入了智能節(jié)電技術(shù),用戶可以配置一套節(jié)電參數(shù),在滿足條件時(shí)可自動(dòng)在節(jié)電模式與性能模式間切換,從而可解決目前事務(wù)處理框架過于復(fù)雜、龐大,占用系統(tǒng)資源較多等問題。
【專利說明】跨平臺(tái)輕量級(jí)事務(wù)處理框架的實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種跨平臺(tái)輕量級(jí)事務(wù)處理框架的實(shí)現(xiàn)方法,更具體地說,涉及一種可解決目前事務(wù)處理框架過于復(fù)雜、龐大,占用系統(tǒng)資源較多等問題的跨平臺(tái)輕量級(jí)事務(wù)處理框架的實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002]隨著智能手機(jī)的普及,手機(jī)應(yīng)用越來越豐富,功能越來越多,軟件的復(fù)雜度也越來越高,而受手機(jī)平臺(tái)硬件及系統(tǒng)限制,一些非常成熟的開發(fā)框架如ACE(AdaptiveCommunicat1n Environment,自適配通信環(huán)境)、Sprint、Structs等因受平臺(tái)限制及系統(tǒng)資源占用量大難以在手機(jī)上運(yùn)行,或移植的成本高昂?,F(xiàn)有的主流事務(wù)處理框架開發(fā)基本使用 java 語言,如 spring、structs、hibernate 等,需要安裝 JDK(Java DevelopmentKit,Java語言的軟件開發(fā)工具包)等環(huán)境才能工作,占用系統(tǒng)資源非常多,通常占用幾十兆以上內(nèi)存,對(duì)硬件的要求比較高,大多用于后臺(tái)系統(tǒng)開發(fā),無法在移動(dòng)手持設(shè)備上工作,因此開發(fā)一套可供手機(jī)平臺(tái)使用的輕量級(jí)事務(wù)處理框架非常有必要。
[0003]現(xiàn)有技術(shù)主要存在以下兩方面的缺點(diǎn):一方面,目前成熟的事務(wù)處理框架主要應(yīng)用在windows及Iinux平臺(tái),在服務(wù)器開發(fā)領(lǐng)域使用比較多,系統(tǒng)資源占用量比較大,且設(shè)計(jì)的重點(diǎn)在盡可能提高系統(tǒng)的處理性能,未考慮過節(jié)電方面的問題,對(duì)于移動(dòng)終端等用電池供電的設(shè)備,需要在性能與節(jié)電方面尋找平衡,設(shè)計(jì)思路有很大的差別;另一方面,現(xiàn)有事務(wù)處理框架大多已有10年以上的時(shí)間,成熟穩(wěn)定,但也非常龐大,代碼量動(dòng)輒幾百萬行,對(duì)使用人員的專業(yè)性要求就已經(jīng)非常高,如果移植到手機(jī)平臺(tái)等,時(shí)間及金錢成本都非常高,同時(shí)由于用到許多高級(jí)語言的新特性,手機(jī)平臺(tái)不一定支持,存在很大的技術(shù)風(fēng)險(xiǎn)。
[0004]綜上述,如何解決現(xiàn)有的事務(wù)處理框架過于復(fù)雜、龐大、占用系統(tǒng)資源較多,且局限應(yīng)用于PC、服務(wù)器等平臺(tái)的問題,成為亟待解決的問題。
【發(fā)明內(nèi)容】
[0005]本發(fā)明所要解決的技術(shù)問題是提供一種簡潔、輕量的跨平臺(tái)輕量級(jí)事務(wù)處理框架的實(shí)現(xiàn)方法,其解決了現(xiàn)有技術(shù)中事務(wù)處理框架過于復(fù)雜、龐大、占用系統(tǒng)資源較多的問題,從而可以滿足手機(jī)等嵌入式設(shè)備硬件的需求。
[0006]為了解決上述技術(shù)問題,本發(fā)明采用了以下技術(shù)方案:
[0007]一種跨平臺(tái)輕量級(jí)事務(wù)處理框架的實(shí)現(xiàn)方法,該方法應(yīng)用于移動(dòng)手持設(shè)備的不同操作系統(tǒng)平臺(tái),如linux、windows、android、mtk及展訊等多個(gè)手機(jī)開發(fā)平臺(tái),該方法的實(shí)現(xiàn)過程包括以下步驟:
[0008]步驟S101,設(shè)置系統(tǒng)抽象層,將事務(wù)處理過程中的元素抽象成多個(gè)對(duì)象,并對(duì)每個(gè)對(duì)象設(shè)制不同的分工,來完成整個(gè)事務(wù)的處理;
[0009]步驟S102,在系統(tǒng)中創(chuàng)建Socket套接口,對(duì)每個(gè)Socket套接口設(shè)置一段緩存區(qū),所述緩存區(qū)大小用戶可配置;在Socket的發(fā)送接口設(shè)置發(fā)送模式標(biāo)識(shí);所述發(fā)送模式分為性能模式和節(jié)電模式;
[0010]步驟S103,在系統(tǒng)中增加系統(tǒng)發(fā)送開關(guān),所述系統(tǒng)發(fā)送開關(guān)為打開狀態(tài)時(shí)發(fā)送緩存區(qū)數(shù)據(jù),所述系統(tǒng)發(fā)送開關(guān)為關(guān)閉狀態(tài)時(shí)不發(fā)送數(shù)據(jù);
[0011]步驟S104,創(chuàng)建單獨(dú)的發(fā)送線程,該線程監(jiān)聽系統(tǒng)發(fā)送開關(guān);
[0012]步驟S105,增加數(shù)據(jù)發(fā)送觸發(fā)器,當(dāng)有數(shù)據(jù)發(fā)送時(shí)創(chuàng)建,當(dāng)超時(shí)時(shí)打開系統(tǒng)發(fā)送開關(guān);
[0013]步驟S106,Socket發(fā)送模式標(biāo)識(shí)為性能模式,將發(fā)送的數(shù)據(jù)緩存到套接口緩存區(qū),打開系統(tǒng)發(fā)送開關(guān);發(fā)送線程監(jiān)聽系統(tǒng)發(fā)送開關(guān)打開事件,發(fā)送Socket緩存區(qū)數(shù)據(jù),當(dāng)Socket緩存數(shù)據(jù)發(fā)送完后,關(guān)閉數(shù)據(jù)發(fā)送開關(guān),同時(shí)如果數(shù)據(jù)發(fā)送觸發(fā)器為打開狀態(tài)時(shí),關(guān)閉數(shù)據(jù)發(fā)送觸發(fā)器;
[0014]步驟S107,Socket發(fā)送模式設(shè)置為節(jié)電模式,將發(fā)送數(shù)據(jù)緩存到Socket緩存區(qū),檢測(cè)所有Socket緩存數(shù)據(jù)總量是否達(dá)到發(fā)送閥值,如果達(dá)到發(fā)送閥值,則打開數(shù)據(jù)發(fā)送開關(guān),執(zhí)行步驟S106 ;如果未達(dá)到發(fā)送閥值,則檢測(cè)數(shù)據(jù)發(fā)送觸發(fā)器是否創(chuàng)建,如未創(chuàng)建,則執(zhí)行步驟S105 ;
[0015]步驟SlOl所述對(duì)象包括,Module (模塊)對(duì)象、MsgHandler (消息處理器)對(duì)象、SignalHandler (信號(hào)處理器)對(duì)象、Transact1n (事務(wù))對(duì)象、Fsm(有限狀態(tài)機(jī))對(duì)象、State (狀態(tài))對(duì)象、EventHandler (事件處理器)對(duì)象,所述對(duì)象之間的關(guān)系及分工如下:
[0016]所述Module 對(duì)象包括 Moduleld、FSMList、MsgHandlerList、SignalHandlerList幾個(gè)成員:
[0017]Moduleld,系統(tǒng)通過消息或信號(hào)目的ModuleId來匹配Module ;
[0018]FSMListi 一個(gè) Module 可以有多個(gè) FSM,Module 通過 Transact1n 中的 FsmId 來匹配FSM ;MsgHandlerList,一個(gè)Module可處理多種類型的Msg,Module通過MsgId匹配MsgHandler ;
[0019]SignalHandlerListi 一個(gè) Module 可以處理多種類型的 Signal,Module 通過SignalId 匹配 SignalHandler ;
[0020]所述MsgHandler對(duì)象根據(jù)業(yè)務(wù)需要進(jìn)行定義,同一個(gè)Module定義的MsgHandler,MsgId 不能相同,所述 MsgHandler 包含 MsgProcessor,MsgProcessor 為工作實(shí)體;
[0021]所述SignalHandler對(duì)象根據(jù)業(yè)務(wù)需要進(jìn)行定義,同一個(gè)Module定義的SignalHandler、MsgId 不會(huì)^相同,SignalHandler 包含 SignalProcessori SignalProcessor為工作實(shí)體;
[0022]所述Transact1n 對(duì)象由 MsgHandler 或 SignalHandler 來創(chuàng)建或銷毀,F(xiàn)SMId 為Transact1n 所在的 FSM ;
[0023]所述FSM對(duì)象根據(jù)業(yè)務(wù)需要進(jìn)行定義,同一個(gè)Module定義的FSM、FSMId不能相同;FsmId、Module 通過 FsmId 來匹配 FSM ;FSM 包括 FsmId、StateList 和 Transact1nList:
[0024]StateList,一個(gè) FSM 可以有多個(gè) State,F(xiàn)SM 通過 Transact1n 的 StateId 來匹配State ;
[0025]Transact1nList,一個(gè) FSM 可以有多個(gè)同時(shí)處理的 Transact1n ;
[0026]所述State對(duì)象根據(jù)FSM需要進(jìn)行定義,與FSM —起創(chuàng)建,同一個(gè)FSM中StateId不能相同,State 包括 StateId 和 EventHandlerList:
[0027]StateId,為 FSM 的實(shí)始 State,同一個(gè) FSM 不能存在 Transact1nId 相同的Transact1n ;
[0028]EventHandlerList,為 State 監(jiān)聽的 Event 的處理器;
[0029]所述EventHandler對(duì)象根據(jù)State需要進(jìn)行定義,與State —起創(chuàng)建,同一個(gè)State 定義的 EventHandler、EventId 不能相同,EventHandler 包含 EventProcessor,EventProcessor為工作實(shí)體;
[0030]因傳統(tǒng)的事務(wù)處理框架多為服務(wù)器開發(fā)設(shè)計(jì),在設(shè)計(jì)時(shí)均追求最大性能,而對(duì)于移動(dòng)終端等靠電池供電的設(shè)備,對(duì)省電有很高的要求,針對(duì)上述現(xiàn)有技術(shù)所存在的問題,本發(fā)明的方法在設(shè)計(jì)上加入了智能節(jié)電技術(shù),用戶可以配置一套節(jié)電參數(shù),在滿足條件時(shí)可自動(dòng)在節(jié)電模式與性能模式間切換。事務(wù)處理通常出現(xiàn)在網(wǎng)絡(luò)通訊,而網(wǎng)絡(luò)通訊是移動(dòng)終端的耗電大戶,本發(fā)明主要針對(duì)網(wǎng)絡(luò)通訊部分進(jìn)行節(jié)電優(yōu)化;本發(fā)明的節(jié)電原理:移動(dòng)終端在進(jìn)行網(wǎng)絡(luò)通訊時(shí)會(huì)功耗非常大,且只要觸發(fā)網(wǎng)絡(luò)訪問,需要在訪問完成一段時(shí)間后才能進(jìn)入省電模式,通過實(shí)測(cè)數(shù)據(jù),終端在進(jìn)行少量數(shù)據(jù)網(wǎng)絡(luò)訪問時(shí),整個(gè)高功耗持續(xù)的時(shí)間是實(shí)際數(shù)據(jù)交互用時(shí)的3?5倍,因此降低網(wǎng)絡(luò)訪問頻率成功節(jié)電的關(guān)鍵。主要應(yīng)用場(chǎng)景:對(duì)于頂?shù)染W(wǎng)絡(luò)通訊類應(yīng)用,因NAT traversal (NET穿越)需要,需定期向服務(wù)器發(fā)送網(wǎng)絡(luò)心跳包,時(shí)間間隔在15s?I分鐘不等,而一個(gè)頂應(yīng)用通常會(huì)有多個(gè)Socket端口需要發(fā)送網(wǎng)絡(luò)心跳包,如果按順序發(fā)送,則會(huì)顯著增加網(wǎng)絡(luò)訪問頻率,增加網(wǎng)絡(luò)通訊時(shí)間,而如果系統(tǒng)針對(duì)此類訪問做緩存處理,將其在一個(gè)周期內(nèi)完成,則能顯著降低網(wǎng)絡(luò)通訊時(shí)間,降低電量損耗。
[0031]手機(jī)等移動(dòng)手持設(shè)備平臺(tái)主要進(jìn)行一些客戶端方面的應(yīng)用開發(fā),事務(wù)處理相對(duì)比較簡單,同時(shí)業(yè)務(wù)需求會(huì)經(jīng)常變更,在程序開發(fā)過程中往往講宄短平快,對(duì)于事務(wù)處理平臺(tái)的要求也更多專注于跨平臺(tái)、輕量好維護(hù)、使用簡單、資源占用少。本發(fā)明主要針對(duì)移動(dòng)手持設(shè)備設(shè)計(jì),采用本發(fā)明方法實(shí)現(xiàn)的事務(wù)處理框架具備以下優(yōu)點(diǎn):
[0032]1、跨平臺(tái):使用c/c++開發(fā),支持linux、windows、android、mtk及展訊等多個(gè)手機(jī)開發(fā)平臺(tái);
[0033]2、系統(tǒng)抽象:對(duì)系統(tǒng)層面的基礎(chǔ)功能如線程、定時(shí)器、網(wǎng)絡(luò)通訊、文件處理、內(nèi)存管理、消息隊(duì)列、互鎖量等常用的基本功能進(jìn)行抽象,并在系統(tǒng)抽象層完成了多線程同步等處理,用戶除了對(duì)框架外部接口部分需要考慮同步方面問題,整個(gè)內(nèi)部開發(fā)完全不用為多線程開發(fā)中的問題煩惱;
[0034]3、輕量、簡潔:整體代碼量在2萬行左右,且按照面向?qū)ο笤O(shè)計(jì),支持業(yè)務(wù)模塊化、低藕合;
[0035]4、可定制:用戶可根據(jù)業(yè)務(wù)需要,對(duì)系統(tǒng)抽象層占用資源大小進(jìn)行配置,如消息隊(duì)列大小,定時(shí)器、網(wǎng)絡(luò)套接口最大個(gè)數(shù)等進(jìn)行配置,以便最大程度節(jié)省系統(tǒng)資源;
[0036]5、節(jié)能省電方面考慮,還可以通過修改網(wǎng)絡(luò)套接口的響應(yīng)速度來減少系統(tǒng)運(yùn)行損耗;
[0037]6、接口簡單:系統(tǒng)抽象層接口完成參照posix標(biāo)準(zhǔn),用戶一看就會(huì)使用,事務(wù)層接口全集中在幾個(gè)簡單的接口類中,用戶只要從這些類繼承即可;
[0038]7、資源占用少:整個(gè)框架在未加載業(yè)務(wù)的情況下啟動(dòng)占用內(nèi)存僅在10k左右。
[0039]在結(jié)合附圖閱讀本發(fā)明的實(shí)施方式的詳細(xì)描述后,本發(fā)明的特點(diǎn)和優(yōu)點(diǎn)將變得更加清楚。
【專利附圖】
【附圖說明】
[0040]圖1是本發(fā)明的方法流程圖;
[0041]圖2是本發(fā)明實(shí)施例的處理流程圖。
【具體實(shí)施方式】
[0042]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具休實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0043]參閱圖1,一種跨平臺(tái)輕量級(jí)事務(wù)處理框架的實(shí)現(xiàn)方法,在移動(dòng)手持設(shè)備的不同操作系統(tǒng)平臺(tái)中設(shè)置事務(wù)處理框架,包括以下步驟:
[0044]步驟S101,設(shè)置系統(tǒng)抽象層,將事務(wù)處理過程中的元素抽象成多個(gè)對(duì)象,并對(duì)每個(gè)對(duì)象設(shè)制不同的分工,來完成整個(gè)事務(wù)的處理;
[0045]步驟S102,在系統(tǒng)中創(chuàng)建Socket (套接字)套接口,對(duì)每個(gè)Socket套接口設(shè)置一段緩存區(qū),所述緩存區(qū)大小用戶可配置;在Socket的發(fā)送接口設(shè)置發(fā)送模式標(biāo)識(shí);所述發(fā)送模式分為性能模式和節(jié)電模式;
[0046]步驟S103,在系統(tǒng)中增加系統(tǒng)發(fā)送開關(guān),所述系統(tǒng)發(fā)送開關(guān)為打開狀態(tài)時(shí)發(fā)送緩存區(qū)數(shù)據(jù),所述系統(tǒng)發(fā)送開關(guān)為關(guān)閉狀態(tài)時(shí)不發(fā)送數(shù)據(jù);
[0047]步驟S104,創(chuàng)建單獨(dú)的發(fā)送線程,該線程監(jiān)聽系統(tǒng)發(fā)送開關(guān);
[0048]步驟S105,增加數(shù)據(jù)發(fā)送觸發(fā)器,當(dāng)有數(shù)據(jù)發(fā)送時(shí)創(chuàng)建,當(dāng)超時(shí)時(shí)打開系統(tǒng)發(fā)送開關(guān);
[0049]步驟S106,Socket發(fā)送模式標(biāo)識(shí)為性能模式,將發(fā)送的數(shù)據(jù)緩存到套接口緩存區(qū),打開系統(tǒng)發(fā)送開關(guān);發(fā)送線程監(jiān)聽系統(tǒng)發(fā)送開關(guān)打開事件,發(fā)送Socket緩存區(qū)數(shù)據(jù),當(dāng)Socket緩存數(shù)據(jù)發(fā)送完后,關(guān)閉數(shù)據(jù)發(fā)送開關(guān),同時(shí)如果數(shù)據(jù)發(fā)送觸發(fā)器為打開狀態(tài)時(shí),關(guān)閉數(shù)據(jù)發(fā)送觸發(fā)器;
[0050]步驟S107,Socket發(fā)送模式設(shè)置為節(jié)電模式,將發(fā)送數(shù)據(jù)緩存到Socket緩存區(qū),檢測(cè)所有Socket緩存數(shù)據(jù)總量是否達(dá)到發(fā)送閥值,如果達(dá)到發(fā)送閥值,則打開數(shù)據(jù)發(fā)送開關(guān),執(zhí)行步驟S106 ;如果未達(dá)到發(fā)送閥值,則檢測(cè)數(shù)據(jù)發(fā)送觸發(fā)器是否創(chuàng)建,如未創(chuàng)建,則執(zhí)行步驟S105。
[0051]步驟SlOl所述對(duì)象包括,Module (模塊)對(duì)象、MsgHandler (消息處理器)對(duì)象、SignalHandler (信號(hào)處理器)對(duì)象、Transact1n (事務(wù))對(duì)象、Fsm(有限狀態(tài)機(jī))對(duì)象、State (狀態(tài))對(duì)象、EventHandler (事件處理器)對(duì)象,所述對(duì)象之間的關(guān)系及分工如下:
[0052]所述Module 對(duì)象包括 Moduleld、FSMList、MsgHandlerList、SignalHandlerList幾個(gè)成員:
[0053]Moduleld,系統(tǒng)通過消息或信號(hào)目的Moduleld來匹配Module ;
[0054]FSMList, 一個(gè) Module 可以有多個(gè) FSM,Module 通過 Transact1n 中的 FsmId 來匹配FSM ;MsgHandlerList,一個(gè)Module可處理多種類型的Msg,Module通過MsgId匹配MsgHandler ;
[0055]SignalHandlerList,一個(gè) Module 可以處理多種類型的 Signal,Module 通過SignalId 匹配 SignalHandler ;
[0056]所述MsgHandler對(duì)象根據(jù)業(yè)務(wù)需要進(jìn)行定義,同一個(gè)Module定義的MsgHandler,MsgId 不能相同,所述 MsgHandler 包含 MsgProcessor,MsgProcessor 為工作實(shí)體;
[0057]所述SignalHandler對(duì)象根據(jù)業(yè)務(wù)需要進(jìn)行定義,同一個(gè)Module定義的SignalHandler、MsgId 不會(huì)^相同,SignalHandler 包含 SignalProcessori SignalProcessor為工作實(shí)體;
[0058]所述Transact1n 對(duì)象由 MsgHandler 或 SignalHandler 來創(chuàng)建或銷毀,F(xiàn)SMId 為Transact1n 所在的 FSM ;
[0059]所述FSM對(duì)象根據(jù)業(yè)務(wù)需要進(jìn)行定義,同一個(gè)Module定義的FSM、FSMId不能相同;FsmId、Module 通過 FsmId 來匹配 FSM ;FSM 包括 FsmId、StateList 和 Transact1nList:
[0060]StateList,一個(gè) FSM 可以有多個(gè) State,F(xiàn)SM 通過 Transact1n 的 StateId 來匹配State ;
[0061]Transact1nList,一個(gè) FSM 可以有多個(gè)同時(shí)處理的 Transact1n ;
[0062]所述State對(duì)象根據(jù)FSM需要進(jìn)行定義,與FSM —起創(chuàng)建,同一個(gè)FSM中StateId不能相同,State 包括 StateId 和 EventHandlerList:
[0063]StateIdi 為 FSM 的實(shí)始 State,同一個(gè) FSM 不能存在 Transact1nId 相同的Transact1n ;
[0064]EventHandlerList,為 State 監(jiān)聽的 Event 的處理器;
[0065]所述EventHandler對(duì)象根據(jù)State需要進(jìn)行定義,與State —起創(chuàng)建,同一個(gè)State 定義的 EventHandler、EventId 不能相同,EventHandler 包含 EventProcessor,EventProcessor為工作實(shí)體;
[0066]為了更好的說明各對(duì)象之間的工作方式,下面以注冊(cè)流程進(jìn)行舉例:
[0067]步驟一:系統(tǒng)啟動(dòng)流程
[0068]初始化系統(tǒng),創(chuàng)建內(nèi)存池,啟動(dòng)系統(tǒng)內(nèi)存線程池,創(chuàng)建套接口、定時(shí)器管理器等;
[0069]創(chuàng)建注冊(cè)業(yè)務(wù)模塊并將其與系統(tǒng)進(jìn)行綁定
[0070]運(yùn)行系統(tǒng),系統(tǒng)將實(shí)時(shí)監(jiān)控注冊(cè)業(yè)務(wù)模塊的消息;
[0071]代碼如下:
[0072]SystemInitO ;//初始化系統(tǒng)
[0073]RegistModule registModule = new RegistModule () ;// 創(chuàng)建業(yè)務(wù)模塊
[0074]SystemBindModule (registModule) ;// 綁定業(yè)務(wù)模塊
[0075]SystemRunO ;// 系統(tǒng)啟動(dòng)
[0076]步驟二:注冊(cè)業(yè)務(wù)模塊創(chuàng)建
[0077]綁定注冊(cè)狀態(tài)機(jī),綁定注冊(cè)請(qǐng)求消息處理器、注冊(cè)取消消息處理器,綁定注冊(cè)響應(yīng)信號(hào)處理器;系統(tǒng)運(yùn)行時(shí)會(huì)實(shí)時(shí)監(jiān)控注冊(cè)請(qǐng)求消息與注冊(cè)響應(yīng)信號(hào),并觸發(fā)對(duì)應(yīng)的消息處理器;
[0078]代碼如下:
[0079]Fsm registfsm = new FsmO ;
[0080]BindFsm(registfsm);
[0081]MsgHandler reqMsgHandler = new RegistReqMsgHandler();
[0082]BindMsgHandler(reqMsgHandler);
[0083]MsgHandler cancelMsgHandler = new RegistCancelMsgHandler();
[0084]BindMsgHandler(cancelMsgHandler);
[0085]SignalHandler rspSignalHandler = new RegistRspSignalHandler();
[0086]BindSignalHandler(rspSignalHandler);
[0087]初始化注冊(cè)狀態(tài)機(jī),對(duì)狀態(tài)機(jī)中的每個(gè)狀態(tài)創(chuàng)建狀態(tài)管理器(如未注冊(cè)狀態(tài)管理器、注冊(cè)中狀態(tài)管理器、注冊(cè)成功狀態(tài)管理器、注冊(cè)失敗狀態(tài)管理器等),狀態(tài)機(jī)綁定所有創(chuàng)建的狀態(tài)管理器;
[0088]代碼如下:
[0089]State noRegistState = new NoRegistState() ;\
[0090]BindFsmState(noRegistState);
[0091]State registingState = new RegistingState();
[0092]BindFsmState(RegistingStateO ;
[0093]State registState = new RegistState ();
[0094]BindFsmState(registState);
[0095]State registFailState = new RegistFailState();
[0096]BindFsmState(registFailState);
[0097]初始化狀態(tài)管理器,對(duì)狀態(tài)管理器監(jiān)管的事件(如注冊(cè)請(qǐng)求事件、注冊(cè)取消事件、注冊(cè)成功事件、注冊(cè)失敗事件、注冊(cè)超時(shí)事件、重傳事件)創(chuàng)建事件處理器,狀態(tài)管理器根據(jù)需要綁定相關(guān)的事件處理器:
[0098]1、未注冊(cè)狀態(tài)管理器綁定注冊(cè)請(qǐng)求事件處理器
[0099]EventHandler registReqEventHandler = new RegistReqEventHandler();
[0100]BindEventHandler(registReqEventHandler);
[0101]2、注冊(cè)中狀態(tài)管理器綁定注冊(cè)取消事件、注冊(cè)成功事件、注冊(cè)失敗事件等;
[0102]EventHandler cancelEventHandler = new CancleEventHandler();
[0103]BindEventHandler(cancelEventHandler);
[0104]EventHandler successEventHandler = new SuccessEventHandler();
[0105]BindEventHandler(successEventHandler);
[0106]EventHandler faiIEventHandler = new FailEventHandler();
[0107]BindEventHandler(faiIEventHandler);
[0108]EventHandler timeoutEventHandler = new TimeoutEventHandlerO ;
[0109]BindEventHandler (timeoutEventHandler);
[0110]EventHandler retransEventHandler = new ReTransEventHandler();
[0111]步驟三:注冊(cè)成功狀態(tài)管理器與注冊(cè)失敗狀態(tài)管理器不綁定任何事件。
[0112]如圖2所示,具體工作流程包括以下步驟:
[0113]S1、用戶向注冊(cè)業(yè)務(wù)模塊發(fā)起一條注冊(cè)請(qǐng)求消息,系統(tǒng)層接收到消息后觸發(fā)注冊(cè)業(yè)務(wù)模塊綁定的注冊(cè)請(qǐng)求消息處理器;
[0114]S2、注冊(cè)請(qǐng)求消息處理器創(chuàng)建一個(gè)注冊(cè)事務(wù),將事務(wù)狀態(tài)設(shè)為未注冊(cè),并對(duì)該事務(wù)發(fā)起一個(gè)注冊(cè)請(qǐng)求事件;
[0115]S3、注冊(cè)事務(wù)還可以設(shè)置異常超時(shí)定時(shí)器,超時(shí)時(shí)間且未成功注冊(cè)將觸發(fā)超時(shí)響應(yīng);
[0116]S4、注冊(cè)事務(wù)還可以設(shè)置重傳定時(shí)器,超過時(shí)間將觸發(fā)重傳響應(yīng)
[0117]S5、注冊(cè)業(yè)務(wù)模塊狀態(tài)機(jī)接收到注冊(cè)請(qǐng)求事件,觸發(fā)未注冊(cè)狀態(tài)管理器中注冊(cè)請(qǐng)求事件處理器;
[0118]S6、注冊(cè)請(qǐng)求事件處理器封裝注冊(cè)請(qǐng)求發(fā)送給服務(wù)器進(jìn)行注冊(cè),并將注冊(cè)事務(wù)的狀態(tài)變更為注冊(cè)中;
[0119]S7、用戶向注冊(cè)業(yè)務(wù)模塊發(fā)起一條注冊(cè)取消消息,系統(tǒng)層接收到消息后觸發(fā)注冊(cè)業(yè)務(wù)模塊綁定的注冊(cè)取消消息處理器;
[0120]S8、注冊(cè)取消消息處理器對(duì)用戶響應(yīng)注冊(cè)取消,刪除注冊(cè)事務(wù);
[0121]S9、重傳定時(shí)器超時(shí),對(duì)注冊(cè)事務(wù)發(fā)起重傳事件;
[0122]S10、系統(tǒng)層接收到注冊(cè)響應(yīng),觸發(fā)注冊(cè)業(yè)務(wù)模塊綁定的注冊(cè)響應(yīng)信號(hào)處理器;
[0123]S11、注冊(cè)響應(yīng)信號(hào)處理器根據(jù)響應(yīng)結(jié)果對(duì)注冊(cè)事務(wù)發(fā)起注冊(cè)成功事件或注冊(cè)失敗事件;
[0124]S12、注冊(cè)事務(wù)異常定時(shí)器超時(shí),對(duì)注冊(cè)事務(wù)發(fā)起注冊(cè)超時(shí)事件;
[0125]S13、注冊(cè)業(yè)務(wù)模塊狀態(tài)機(jī)接收到重傳事件,觸發(fā)注冊(cè)中狀態(tài)管理器中重傳事件處理器;
[0126]S14、重傳事件處理器封裝注冊(cè)請(qǐng)求發(fā)送給服務(wù)器;
[0127]S15、注冊(cè)業(yè)務(wù)模塊狀態(tài)機(jī)接收到注冊(cè)成功事件,觸發(fā)注冊(cè)中狀態(tài)管理器中注冊(cè)成功事件處理器;
[0128]S16、注冊(cè)成功事件處理器對(duì)用戶響應(yīng)注冊(cè)成功,關(guān)閉異常超時(shí)定時(shí)器,關(guān)閉重傳定時(shí)器,并將注冊(cè)事務(wù)狀態(tài)變更為注冊(cè)成功;
[0129]S17、注冊(cè)業(yè)務(wù)模塊狀態(tài)機(jī)接收到注冊(cè)失敗事件,觸發(fā)注冊(cè)中狀態(tài)管理器中注冊(cè)失敗事件處理器;
[0130]S18、注冊(cè)失敗事件處理器對(duì)用戶響應(yīng)注冊(cè)失敗,關(guān)閉異常超時(shí)定時(shí)器,關(guān)閉重傳定時(shí)器,并將注冊(cè)事務(wù)狀態(tài)變更為注冊(cè)失?。?br>
[0131]S19、注冊(cè)業(yè)務(wù)模塊狀態(tài)機(jī)接收到注冊(cè)超時(shí)事件,觸發(fā)注冊(cè)中狀態(tài)管理器中注冊(cè)超時(shí)事件處理器;
[0132]S20、注冊(cè)超時(shí)事件處理器對(duì)用戶響應(yīng)注冊(cè)失敗,關(guān)閉異常超時(shí)定時(shí)器,關(guān)閉重傳定時(shí)器,并將注冊(cè)事務(wù)狀態(tài)變更為注冊(cè)失?。?br>
[0133]S21、注冊(cè)事務(wù)處于注冊(cè)成功狀態(tài),注冊(cè)業(yè)務(wù)模塊狀態(tài)機(jī)接收到重復(fù)的注冊(cè)響應(yīng)事件,因注冊(cè)成功狀態(tài)處理器未綁定事件處理器,直接返回;
[0134]S22、注冊(cè)事務(wù)處于注冊(cè)失敗狀態(tài),注冊(cè)業(yè)務(wù)模塊狀態(tài)機(jī)接收到重復(fù)的注冊(cè)響應(yīng)事件,因注冊(cè)失敗狀態(tài)處理器未綁定事件處理器,直接返回。
[0135]雖然結(jié)合附圖描述了本發(fā)明的實(shí)施方式,但是本領(lǐng)域的技術(shù)人員可以在所附權(quán)利要求的范圍之內(nèi)作出各種變形或修改,只要不超過本發(fā)明的權(quán)利要求所描述的保護(hù)范圍,都應(yīng)當(dāng)在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種跨平臺(tái)輕量級(jí)事務(wù)處理框架的實(shí)現(xiàn)方法,該方法應(yīng)用于移動(dòng)手持設(shè)備的不同操作系統(tǒng)平臺(tái),其特征在于: 包括以下步驟: 步驟S101,設(shè)置系統(tǒng)抽象層,將事務(wù)處理過程中的元素抽象成多個(gè)對(duì)象,并對(duì)每個(gè)對(duì)象設(shè)制不同的分工,來完成整個(gè)事務(wù)的處理; 步驟S102,在系統(tǒng)中創(chuàng)建Socket套接口,對(duì)每個(gè)Socket套接口設(shè)置一段緩存區(qū),所述緩存區(qū)大小用戶可配置;在Socket的發(fā)送接口設(shè)置發(fā)送模式標(biāo)識(shí);所述發(fā)送模式分為性能模式和節(jié)電模式; 步驟S103,在系統(tǒng)中增加系統(tǒng)發(fā)送開關(guān),所述系統(tǒng)發(fā)送開關(guān)為打開狀態(tài)時(shí)發(fā)送緩存區(qū)數(shù)據(jù),所述系統(tǒng)發(fā)送開關(guān)為關(guān)閉狀態(tài)時(shí)不發(fā)送數(shù)據(jù); 步驟S104,創(chuàng)建單獨(dú)的發(fā)送線程,該線程監(jiān)聽系統(tǒng)發(fā)送開關(guān);步驟S105,增加數(shù)據(jù)發(fā)送觸發(fā)器,當(dāng)有數(shù)據(jù)發(fā)送時(shí)創(chuàng)建,當(dāng)超時(shí)時(shí)打開系統(tǒng)發(fā)送開關(guān);步驟S106,Socket發(fā)送模式標(biāo)識(shí)為性能模式,將發(fā)送的數(shù)據(jù)緩存到套接口緩存區(qū),打開系統(tǒng)發(fā)送開關(guān);發(fā)送線程監(jiān)聽系統(tǒng)發(fā)送開關(guān)打開事件,發(fā)送Socket緩存區(qū)數(shù)據(jù),當(dāng)Socket緩存數(shù)據(jù)發(fā)送完后,關(guān)閉數(shù)據(jù)發(fā)送開關(guān),同時(shí)如果數(shù)據(jù)發(fā)送觸發(fā)器為打開狀態(tài)時(shí),關(guān)閉數(shù)據(jù)發(fā)送觸發(fā)器; 步驟S107,Socket發(fā)送模式設(shè)置為節(jié)電模式,將發(fā)送數(shù)據(jù)緩存到Socket緩存區(qū),檢測(cè)所有Socket緩存數(shù)據(jù)總量是否達(dá)到發(fā)送閥值,如果達(dá)到發(fā)送閥值,則打開數(shù)據(jù)發(fā)送開關(guān),執(zhí)行步驟S106 ;如果未達(dá)到發(fā)送閥值,則檢測(cè)數(shù)據(jù)發(fā)送觸發(fā)器是否創(chuàng)建,如未創(chuàng)建,則執(zhí)行步驟S105。
2.如權(quán)利要求1所述的一種跨平臺(tái)輕量級(jí)事務(wù)處理框架的實(shí)現(xiàn)方法,其特征在于:步驟S1I所述對(duì)象包括,Mo du I e模塊對(duì)象、MsgHandl er消息處理器對(duì)象、S i gna I Hand I er信號(hào)處理器對(duì)象、Transact1n事務(wù)對(duì)象、Fsm有限狀態(tài)機(jī)對(duì)象、State狀態(tài)對(duì)象、EventHandler事件處理器對(duì)象,所述對(duì)象之間的關(guān)系及分工如下: 所述 Module 對(duì)象包括 ModuleId、FSMList、MsgHandlerList、SignalHandlerList 幾個(gè)成員: ModuleId,系統(tǒng)通過消息或信號(hào)目的ModuleId來匹配Module ; FSMList, 一 個(gè) Module 可以有多個(gè) FSM,Module 通過 Transact1n 中的 FsmId 來匹配FSM ;MsgHandlerList,一個(gè)Module可處理多種類型的Msg,Module通過MsgId匹配MsgHandler ; SignalHandlerList, 一個(gè) Module 可以處理多種類型的 Signal,Module 通過 SignalId匹配 SignalHandler ; 所述MsgHandler對(duì)象根據(jù)業(yè)務(wù)需要進(jìn)行定義,同一個(gè)Module定義的MsgHandler,MsgId 不能相同,所述 MsgHandler 包含 MsgProcessor,MsgProcessor 為工作實(shí)體; 所述SignalHandler對(duì)象根據(jù)業(yè)務(wù)需要進(jìn)行定義,同一個(gè)Module定義的SignalHandler、MsgId 不會(huì)泛相同,SignalHandler 包含 SignalProcessor,SignalProcessor為工作實(shí)體; 所述 Transact1n 對(duì)象由 MsgHandler 或 SignalHandler 來創(chuàng)建或銷毀,F(xiàn)SMId 為Transact1n 所在的 FSM ; 所述FSM對(duì)象根據(jù)業(yè)務(wù)需要進(jìn)行定義,同一個(gè)Module定義的FSM、FSMId不能相同;Fsmld、Module 通過 FsmId 來匹配 FSM ;FSM 包括 Fsmld、StateList 和 Transact1nList:StateListi 一個(gè) FSM 可以有多個(gè) State,F(xiàn)SM 通過 Transact1n 的 StateId 來匹配State ; Transact1nList,一個(gè)FSM可以有多個(gè)同時(shí)處理的Transact1n ; 所述State對(duì)象根據(jù)FSM需要進(jìn)行定義,與FSM —起創(chuàng)建,同一個(gè)FSM中StateId不能相同,State 包括 StateId 和 EventHandlerList: StateIdi為FSM的實(shí)始State,同一個(gè)FSM不能存在Transact1nId相同的Transact1n ; EventHandlerList,為 State 監(jiān)聽的 Event 的處理器; 所述EventHandler對(duì)象根據(jù)State需要進(jìn)行定義,與State —起創(chuàng)建,同一個(gè)State 定義的 EventHandler、EventId 不能相同,EventHandler 包含 EventProcessor,EventProcessor為工作實(shí)體。
【文檔編號(hào)】G06F9/44GK104484170SQ201410764249
【公開日】2015年4月1日 申請(qǐng)日期:2014年12月11日 優(yōu)先權(quán)日:2014年12月11日
【發(fā)明者】陳岱暉 申請(qǐng)人:深圳市源通世紀(jì)科技有限公司