青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

CppExplore

一切像霧像雨又像風(fēng)

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  29 隨筆 :: 0 文章 :: 280 評論 :: 0 Trackbacks

作者:CppExplore 網(wǎng)址:http://m.shnenglu.com/CppExplore/
網(wǎng)絡(luò)請求包經(jīng)過網(wǎng)絡(luò)層(技術(shù)系列綜述(一))被解析翻譯成程序自定義的消息,之后被投遞到業(yè)務(wù)線程的線程消息隊(duì)列(技術(shù)系列綜述(二))中。業(yè)務(wù)線程在隊(duì)列的另一端取出消息,開始處理,這是本章要介紹的部分。業(yè)務(wù)處理部分:主要有會(huì)話類(Session)和會(huì)話管理類(SessionManager,常見該類為單例)。先給出類圖,后文詳細(xì)介紹:

一 SessionManager的職責(zé)
(1)繼承IMsgThread(技術(shù)系列綜述(二)),調(diào)用該類的start方法,啟動(dòng)業(yè)務(wù)線程
(2)提供on_.../do_...方法技術(shù)系列綜述(二)),供其它線程向業(yè)務(wù)線程投遞消息,以及消息在業(yè)務(wù)線程的處理入口。
(3)主要的私有屬性是session類的容器對象。容器類的選型的依據(jù),首先是查詢性能,之后是插入刪除的性能。
array:數(shù)組下標(biāo)為session對象的seesionid_(此處sessionid,不要理解為常見協(xié)議中的session字段,可以理解為session對象的索引)。可以做到插入刪除(參考內(nèi)存管理chunk分配算法)查詢都在o(1)完成,缺點(diǎn)不能動(dòng)態(tài)增大。同樣可以參考定長內(nèi)存池的分配算法,動(dòng)態(tài)申請255個(gè)array為一個(gè)chunk,所有chunk使用vector管理,各chunk中array編號(hào)遞增255,同樣可以達(dá)到增刪查o(1)的效率。
缺點(diǎn):(1)sessionid_重復(fù)使用,加上消息經(jīng)過消息隊(duì)列形成的處理延遲,可能造成下一個(gè)session對象處理上一個(gè)同樣sessionid的session對象遺留下來的消息,實(shí)際使用中每個(gè)session對象有自己的狀態(tài)機(jī),這種殘留的消息危害并不大。(2)需要自己實(shí)現(xiàn),對比map的o(logn),這點(diǎn)細(xì)微的性能提升無任何意義(也就是減少了幾次整型之間的對比)。相比不需要自己額外實(shí)現(xiàn)的普通數(shù)組還算有點(diǎn)實(shí)用價(jià)值。
vector:如果被插入的session的sessionid是遞增的,查詢可以做到折半查找logn的性能,但隨機(jī)刪除造成的內(nèi)存移動(dòng)是o(n),無法接受。
map:以紅黑樹為基礎(chǔ)實(shí)現(xiàn)。增刪查找的性能都可以平穩(wěn)的保持在o(logn),sessionid_為整型或者其operater<實(shí)現(xiàn)簡單的時(shí)候是最常用的容器。
hash_map:哈希表,使用大量內(nèi)存盡量使數(shù)據(jù)均勻分布,查詢性能分hashcode的計(jì)算(hash函數(shù))和查找部分,hash函數(shù)一般為所有有效信息的移位計(jì)算(經(jīng)典的是字符串的33算法)疊加,查找部分最理想的是0(1),最差是0(n),取決于hash函數(shù)計(jì)算結(jié)果碰撞的幾率。當(dāng)sessionid_為字符串或者其operater<實(shí)現(xiàn)復(fù)雜的時(shí)候常用。
(4)該類處理消息的方式舉例如下:(容器以map<int,session *> mapSessions_為例)

void do_msg_type_1_(MsgData &msg)
{
  
int id=msg.sessionid;
  
if(mapSessions_.find(id)!=mapSessions_.end())
  
{
    session 
*pSession=mapSessions_[id];
    pSession
->on_msg_1(msg);
  }

  
else
  
{
    write_warning_log;
  }

}


如上例所示,session管理類對消息的處理方式必須簡單固定,方便可持續(xù)維護(hù)、擴(kuò)充。
二 Session的職責(zé)
(1)數(shù)據(jù)結(jié)構(gòu):每一路連接的業(yè)務(wù)處理部分,首先有sessionid_標(biāo)記session本身,其次包含業(yè)務(wù)處理需要的必須的數(shù)據(jù)部分,另外最重要的一個(gè)數(shù)據(jù)結(jié)構(gòu)就是狀態(tài)機(jī)了。
(2)狀態(tài)機(jī)。狀態(tài)機(jī)標(biāo)識(shí)session對象的狀態(tài),接收外部輸入的事件,驅(qū)動(dòng)狀態(tài)機(jī)運(yùn)行,并作出行為響應(yīng)。詳細(xì)見技術(shù)系列之 狀態(tài)機(jī)(一)技術(shù)系列之 狀態(tài)機(jī)(二),不多說了。
(3)方法。主要分兩類:on_msg和do_event。舉例如下:

void on_msg(MsgData &msg)
{
    EventData 
event;
    
event.detail=msg.detail;//todo
    fsm.do_event(event);
}

void do_event..(EventData &event)
{
    
//change session's data or send msg to other thread or response request or others.. 
}

注意:
1、所有有可能改變session內(nèi)蘊(yùn)狀態(tài)的操作都必須納入狀態(tài)機(jī)的嚴(yán)格控制,不能存在不通過狀態(tài)機(jī)即可改變session內(nèi)蘊(yùn)狀態(tài)的操作入口。
2、如果兩個(gè)狀態(tài)對同樣的事件做出同樣的反應(yīng),并且都遷移到相同的狀態(tài),那么這兩個(gè)是同一個(gè)狀態(tài)。
3、盡可能減少狀態(tài)的個(gè)數(shù)。如果兩個(gè)狀態(tài)具有嚴(yán)格的時(shí)序關(guān)系,處理的事件不同并且有嚴(yán)格的時(shí)序關(guān)系,那么考慮合并這兩個(gè)狀態(tài),防止?fàn)顟B(tài)機(jī)膨脹。

三 總結(jié):
理解業(yè)務(wù)部分,先區(qū)分消息(Msg)和事件(Event)。
1、消息(Msg):是指線程之間傳遞的數(shù)據(jù)結(jié)構(gòu),即被投遞到線程消息隊(duì)列中的數(shù)據(jù)結(jié)構(gòu)。SessionManager主要職責(zé)是接收消息,通過消息映射,找到處理該消息的函數(shù),該函數(shù)根據(jù)消息中攜帶的sessionid,找到session對象,調(diào)用該session的消息處理函數(shù)繼續(xù)后續(xù)的處理。
2、事件(Event):是指被session對象中的狀態(tài)機(jī)處理的數(shù)據(jù)結(jié)構(gòu)。該數(shù)據(jù)結(jié)構(gòu),在session的消息處理函數(shù)中通過消息的內(nèi)容拼湊,之后交給狀態(tài)機(jī)對象處理,狀態(tài)機(jī)對象根據(jù)事件類型,通過事件映射,找到處理該事件的函數(shù),繼續(xù)該事件的處理。
3、代碼流程:一般情況下(邏輯控制部分)其它線程不能直接調(diào)用session對象,正確的調(diào)用方式是發(fā)消息SessionManager,SessionManager根據(jù)消息找到session對象再進(jìn)行后續(xù)處理。
4、代碼要寫的足夠呆板。
   寫出好的系統(tǒng)關(guān)鍵在于對業(yè)務(wù)的理解,不在于對代碼技巧的玩弄。

 

posted on 2008-12-22 14:27 cppexplore 閱讀(4618) 評論(6)  編輯 收藏 引用

評論

# re: 【原創(chuàng)】技術(shù)系列綜述(三) 2008-12-23 10:57 kacy16
非常謝謝cppexplore無私的把自己實(shí)際經(jīng)驗(yàn)無私的分享,感覺這些思路(經(jīng)驗(yàn))都非常的實(shí)用,考慮到了實(shí)際情況的擴(kuò)展性,效率等各方面,不像一些書本的資料夸夸其談,提供的思路要不全是抽象的理論,要不就是一整個(gè)花架子(就像小孩過家家的玩意).非常謝謝!  回復(fù)  更多評論
  

# re: 【原創(chuàng)】技術(shù)系列綜述(三) [未登錄] 2008-12-23 21:19 cppexplore
@kacy16
:)  回復(fù)  更多評論
  

# re: 【原創(chuàng)】技術(shù)系列綜述(三) 2009-04-01 11:30 中國兄弟連
給你踩踩哈  回復(fù)  更多評論
  

# re: 【原創(chuàng)】服務(wù)器技術(shù)系列綜述(三) 2009-12-26 05:38 浩毛
拒絕線程,珍愛生命  回復(fù)  更多評論
  

# re: 【原創(chuàng)】服務(wù)器技術(shù)系列綜述(三) 2010-04-13 16:05 zhaojx
大牛,我剛畢業(yè)一年,工作中的很多內(nèi)容在你的文章里都有,你的文章真的是總結(jié)到我的心坎里了,好多東西都是這么熟悉,但是就是因?yàn)樽约簺]有總結(jié),看了你的文章,真的是頗有收獲,希望你能繼續(xù)寫下去  回復(fù)  更多評論
  

# re: 【原創(chuàng)】服務(wù)器技術(shù)系列綜述(三) [未登錄] 2010-04-13 16:48 cppexplore
@zhaojx
很高興你能喜歡我寫的內(nèi)容, :)   回復(fù)  更多評論
  


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久婷婷久久| 国产麻豆精品久久一二三| 亚洲国产精品一区制服丝袜| 欧美一区二区播放| 欧美国产精品专区| 亚洲国产高清高潮精品美女| 亚洲国产日韩欧美在线图片| 欧美黄色片免费观看| 亚洲国产精品尤物yw在线观看| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲自拍电影| 亚洲欧美日本国产有色| 欧美在线高清| 久久国产综合精品| 男女激情久久| 亚洲美女免费视频| 亚洲伊人第一页| 欧美在线观看一区二区三区| 久久久久久夜| 欧美成人官网二区| 国产精品一香蕉国产线看观看 | 欧美性jizz18性欧美| 欧美精品在线观看91| 国产精品亚洲一区| 亚洲三级视频| 久久久五月婷婷| 亚洲精品一区二| 久久久久久欧美| 国产精品视频一二三| 亚洲日本va在线观看| 欧美一区二区三区精品电影| 亚洲第一福利在线观看| 亚洲欧美日韩国产中文| 欧美日本精品在线| 亚洲成人自拍视频| 久久精品国产久精国产思思| 亚洲精品国产无天堂网2021| 久久国产精品一区二区三区四区| 欧美人与性动交cc0o| 国产一区二区三区免费不卡| 亚洲图片在线| 欧美激情中文字幕一区二区| 欧美制服丝袜第一页| 欧美私人啪啪vps| 久久久免费av| 亚洲男女自偷自拍图片另类| 国产自产精品| 黄色成人在线网址| 亚洲专区一区二区三区| 亚洲国产精品福利| 久久国产黑丝| 国产一区二区三区丝袜| 亚洲欧美综合| 亚洲色图自拍| 国产精品久久久久久久久搜平片 | 日韩天堂av| 欧美黄色片免费观看| 最新日韩欧美| 亚洲高清视频中文字幕| 毛片一区二区三区| 国产麻豆午夜三级精品| 亚洲天堂网站在线观看视频| 亚洲激情在线观看| 欧美护士18xxxxhd| 亚洲素人在线| 亚洲午夜av在线| 国产日韩欧美一区二区| 久久久精品性| 老牛影视一区二区三区| 99国产精品视频免费观看一公开| 亚洲国产精品免费| 欧美日韩精品欧美日韩精品| 亚洲一区二区三区四区五区黄| 一区二区免费在线视频| 国产伦精品一区二区三区高清版| 性高湖久久久久久久久| 亚洲欧美精品一区| 樱桃成人精品视频在线播放| 亚洲大片免费看| 欧美图区在线视频| 久久手机免费观看| 欧美精品97| 性8sex亚洲区入口| 狂野欧美激情性xxxx欧美| 99在线视频精品| 欧美一级在线视频| 午夜一区二区三区在线观看| 亚洲欧洲偷拍精品| 嫩草影视亚洲| 亚洲天堂偷拍| 久久精品国产一区二区电影 | 国产一区二区三区高清在线观看| 麻豆精品视频| 国产精品二区三区四区| 久久午夜羞羞影院免费观看| 欧美区二区三区| 久久欧美肥婆一二区| 欧美国产一区二区三区激情无套| 亚洲欧美综合另类中字| 玖玖精品视频| 精品成人一区二区三区| 亚洲啪啪91| 亚洲一区二区三区四区五区黄| 狠狠色狠狠色综合日日tαg| 亚洲黄色天堂| 伊人久久亚洲美女图片| 一区二区三区免费看| 亚洲福利视频专区| 午夜精品www| 亚洲一区二区精品在线观看| 久久亚洲精选| 久久精品主播| 国产精品日韩欧美大师| 亚洲日韩欧美视频一区| 狠狠干狠狠久久| 欧美一区精品| 久久激情五月婷婷| 亚洲视频久久| 亚洲人成绝费网站色www| 久久国产精品99国产精| 亚洲欧美日本国产专区一区| 欧美另类69精品久久久久9999| 久久一二三区| 韩日午夜在线资源一区二区| 亚洲在线第一页| 亚洲一卡二卡三卡四卡五卡| 欧美高清视频一区| 欧美va天堂va视频va在线| 国产综合色在线视频区| 欧美亚洲三级| 久久久999国产| 好吊妞**欧美| 久久天天狠狠| 亚洲第一精品福利| 91久久线看在观草草青青| 久久五月天婷婷| 国产日本欧美一区二区| 久久综合亚洲社区| 久久精品日韩欧美| 老色批av在线精品| 亚洲你懂的在线视频| 欧美欧美在线| 亚洲免费久久| 亚洲精品在线观看免费| 美国十次成人| 亚洲国产婷婷香蕉久久久久久| 一区一区视频| 久久久久久一区二区三区| 久久蜜臀精品av| 精品88久久久久88久久久| 久久亚洲精品伦理| 亚洲精品乱码久久久久久| 99re6这里只有精品| 欧美性猛交xxxx免费看久久久| 亚洲一区二区3| 久久午夜精品一区二区| 亚洲精品免费一区二区三区| 欧美了一区在线观看| 国产亚洲人成网站在线观看| 午夜精品在线视频| 免费观看30秒视频久久| 亚洲欧洲三级电影| 国产精品欧美一区二区三区奶水| 羞羞色国产精品| 欧美成人dvd在线视频| 99国产精品国产精品毛片| 国产精品欧美久久| 久久久在线视频| 一本大道av伊人久久综合| 久久久精品久久久久| 日韩一二三在线视频播| 国产情侣久久| 欧美日韩精品欧美日韩精品| 欧美专区18| 亚洲精品欧美日韩专区| 久久精品国产亚洲a| 在线性视频日韩欧美| 国内精品免费午夜毛片| 欧美日韩国产首页在线观看| 欧美一区二区三区免费大片| 亚洲黄色成人久久久| 久久久久久久999精品视频| 日韩视频中文字幕| 黄色av日韩| 国产三级精品三级| 欧美日韩在线一区二区| 久久精品国产99精品国产亚洲性色| 亚洲国产高清自拍| 亚洲视频狠狠| 亚洲人体大胆视频| 欧美国产国产综合| 国产精品午夜电影| 亚洲男人的天堂在线观看| 在线视频精品一区| 国产精品99免费看 | 欧美性猛交一区二区三区精品| 欧美成人午夜视频| 亚洲高清视频一区| 久久综合久久88| 亚洲欧美第一页|