C++高性能服務(wù)器框架 - sylar

sylar

視頻教程地址

  1. C++服務(wù)器框架01_日志系統(tǒng)01
  2. C++服務(wù)器框架02_日志系統(tǒng)02_logger
  3. C++服務(wù)器框架03_日志系統(tǒng)03_appender
  4. C++服務(wù)器框架04_日志系統(tǒng)04_formatter
  5. C++服務(wù)器框架05_日志系統(tǒng)05_formatter2
  6. C++服務(wù)器框架06_日志系統(tǒng)06_編譯調(diào)試
  7. C++服務(wù)器框架07_日志系統(tǒng)07_完善日志系統(tǒng)
  8. C++服務(wù)器框架08_日志系統(tǒng)08_完善日志系統(tǒng)2
  9. C++服務(wù)器框架09_配置系統(tǒng)01_基礎(chǔ)配置
  10. C++服務(wù)器框架10_配置系統(tǒng)02_yaml
  11. C++服務(wù)器框架11_配置系統(tǒng)03_yaml整合
  12. C++服務(wù)器框架12_配置系統(tǒng)04_復(fù)雜類型的支持
  13. C++服務(wù)器框架13_配置系統(tǒng)05_更多stl容器支持
  14. C++服務(wù)器框架14_配置系統(tǒng)06_自定義類型的支持
  15. C++服務(wù)器框架15_配置系統(tǒng)07_配置變更事件
  16. C++服務(wù)器框架16_配置系統(tǒng)08_日志系統(tǒng)整合01
  17. C++服務(wù)器框架17_配置系統(tǒng)09_日志系統(tǒng)整合02
  18. C++服務(wù)器框架18_配置系統(tǒng)10_日志系統(tǒng)整合03

開發(fā)環(huán)境

Centos7
gcc 9.1
cmake
vim

項(xiàng)目路徑

bin -- 二進(jìn)制
build -- 中間文件路徑
cmake -- cmake函數(shù)文件夾
CMakeLists.txt -- cmake的定義文件
lib -- 庫的輸出路徑
Makefile
sylar -- 源代碼路徑
tests -- 測(cè)試代碼

日志系統(tǒng)

1)
仿照Log4J定義結(jié)構(gòu)

                Logger (定義日志類別)
                   |                                                  
                   |-------Formatter(日志格式)----- FormatterItem 
                   |
                Appender(日志輸出地方)
                  |
          ------------------------
          |                      |
  FileLogAppender         StdoutLogAppender

配置系統(tǒng)

Config --> Yaml

yamp-cpp: github 搜
mkdir build && cd build && cmake .. && make install

YAML::Node node = YAML::LoadFile(filename);
node.IsMap()
for(auto it = node.begin();
    it != node.end(); ++it) {
        it->first, it->second
}

node.IsSequence()
for(size_t i = 0; i < node.size(); ++i) {
    
}

node.IsScalar();

配置系統(tǒng)的原則,約定優(yōu)于配置:

template<T, FromStr, ToStr>
class ConfigVar;

template<F, T>
LexicalCast;

//容器片特化,目前支持vector
//list, set, map, unordered_set, unordered_map
// map/unordered_set 支持key = std::string
// Config::Lookup(key) , key相同, 類型不同的,不會(huì)有報(bào)錯(cuò)。這個(gè)需要處理一下

自定義類型,需要實(shí)現(xiàn)sylar::LexicalCast,片特化
實(shí)現(xiàn)后,就可以支持Config解析自定義類型,自定義類型可以和常規(guī)stl容器一起使用。

配置的事件機(jī)制
當(dāng)一個(gè)配置項(xiàng)發(fā)生修改的時(shí)候,可以反向通知對(duì)應(yīng)的代碼,回調(diào)

日志系統(tǒng)整合配置系統(tǒng)

logs:
    - name: root
      level: (debug,info,warn,error,fatal)
      formatter: '%d%T%p%T%t%m%n'
      appender:
        - type: (StdoutLogAppender, FileLogAppender)
          level:(debug,...)
          file: /logs/xxx.log
    sylar::Logger g_logger = sylar::LoggerMgr::GetInstance()->getLogger(name);
    SYLAR_LOG_INFO(g_logger) << "xxxx log";
static Logger::ptr g_log = SYLAR_LOG_NAME("system"); //m_root, m_system-> m_root 當(dāng)logger的appenders為空,使用root寫logger
//定義LogDefine LogAppenderDefine, 偏特化 LexicalCast,
//實(shí)現(xiàn)日志配置解析

遺留問題:

  1. appender定義的formatter讀取yaml的時(shí)候,沒有被初始化
  2. 去掉額外的調(diào)試日志

協(xié)程庫封裝

socket函數(shù)庫

http協(xié)議開發(fā)

分布協(xié)議

推薦系統(tǒng)

其他信息

  1. 個(gè)人主頁
  2. 項(xiàng)目源碼
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,657評(píng)論 1 32
  • 轉(zhuǎn)自:[http://blog.csdn.net/liu88010988/article/details/5154...
    hackywit閱讀 6,282評(píng)論 0 26
  • 《溫情》作者:清風(fēng)悲秋繁忙的冬季悄然無聲的藏起藏的不干脆它讓一切開始了無所謂的節(jié)拍我看到櫻花開了看到桃花醉了看到梅...
    清風(fēng)悲秋閱讀 231評(píng)論 0 0
  • 特別喜歡李碧華在《霸王別姬》里說的一段話: “每一個(gè)人,有其依附之物。娃娃依附臍帶,孩子依附娘親,女人依附男人。有...
    莽姐愛撩劇閱讀 590評(píng)論 0 50
  • 花山椒重慶小面閱讀 143評(píng)論 0 0

友情鏈接更多精彩內(nèi)容