有限状态机的C++实现(2)-bayonet开源网络服务器框架
有限狀態(tài)機(jī)的C++實(shí)現(xiàn)(2)-bayonet開源網(wǎng)絡(luò)服務(wù)器框架 | Vimer的程序世界
有限狀態(tài)機(jī)的C++實(shí)現(xiàn)(2)-bayonet開源網(wǎng)絡(luò)服務(wù)器框架
Published on 二月 18, 2011 6,009接著上一篇文章: 有限狀態(tài)機(jī)的C++實(shí)現(xiàn)(1)-epoll狀態(tài)機(jī),我們今天來介紹更復(fù)雜和深入的部分。
為什么會(huì)在標(biāo)題中提到bayonet這個(gè)開源項(xiàng)目呢?筆者本人一直想要寫一套架構(gòu)優(yōu)美、功能完善的異步server框架,也看過很多朋友、同事實(shí)現(xiàn)的版本,雖然功能上基本能滿足需求,但是架構(gòu)上我卻始終覺得是有瑕疵的,直到后來和同事討論,發(fā)現(xiàn)可以讓一個(gè)客戶端請(qǐng)求的到來作為一個(gè)session,而之后的每一次與其他server的交互都可以看作是一次狀態(tài)轉(zhuǎn)化,才感覺架構(gòu)比較合理了。
簡單來說即,一個(gè)session從開始到介紹會(huì)經(jīng)歷兩種狀態(tài)機(jī)的變化:
- 1.業(yè)務(wù)邏輯層面的狀態(tài)變化,例如先驗(yàn)證登錄態(tài),再驗(yàn)證權(quán)限,再獲取用戶資料
- 2.每一個(gè)與其他server交互的socket自身的狀態(tài)變化,如recv、send、等,而socket的狀態(tài)變化會(huì)觸發(fā)邏輯層的狀態(tài)變化。
按照這種思路,目前的代碼開發(fā)已經(jīng)完成了70%,即可以正常的進(jìn)行一個(gè)session的開始和結(jié)束,主要還缺一些細(xì)節(jié)的代碼,比如超時(shí)的檢測及超時(shí)之后的處理,健全的統(tǒng)計(jì)之類。好了,我們來用vs看一下代碼的整體類圖(圖壓縮比較嚴(yán)重,請(qǐng)單擊后查看):
每個(gè)類的用處已經(jīng)在途中簡單說明了,這里就不再贅述,我們重點(diǎn)來看一下用這個(gè)框架來實(shí)現(xiàn)一個(gè)邏輯server時(shí)需要做哪些事情。
svr2目錄下的main.cpp即實(shí)現(xiàn)了一個(gè)最簡單的server,我們按部分來看其實(shí)現(xiàn):
總結(jié)
以上是生活随笔為你收集整理的有限状态机的C++实现(2)-bayonet开源网络服务器框架的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JFinal interceptor -
- 下一篇: HDU-2332 机器人的舞蹈 递推