Skip to content

Meha555/server-framework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C++高性能服务器框架

简介

仿sylar: C++高性能分布式服务器框架的基于C++17实现的高性能服务器框架。

参考资料:

项目结构

本项目编译生成静态库 libconet.a,测试代码在tests下面。

模块及其内部组件

  • 日志模块
    • LogEvent:封装后的日志消息(即日志的元数据)
    • LogFormatter:日志格式化器
    • LogAppender:日志输出器
      • StdoutLogAppender:标准输出日志输出器
      • FileLogAppender:文件日志输出器
    • Logger:日志器,组合使用上述组件
    • LogConfig:日志器配置信息类
    • LogAppenderConfig:日志输出器的配置信息类
    • LogEventWrapper:日志的RAII风格打印(析构时打印日志)
  • 配置模块

杂谈

1.方法论

1.1如何阅读这个大型项目

(1)先建好环境,让程序能运行,玩一遍

当你拿到一个程序后,即使你不看代码,你也应该知道它是干什么的吧!干啥都不知道,不用看了。

(2)看想办法掌握程序的结构

作者微博、Google、百度、PDSN、等找到程序的体系结构,完整的文档

(3)先体系再细节;先平面再线点。

先整体再局部,先平面再线点。"大胆猜测,小心求证"。在阅读程序的过程中,我们往往对某一处或几处逻辑不肯定,可能是这样,也可能是那样。

(4)断点调试、日志调试。

(5)忽略细节,先前不要关注分支

Main开始一字一句的解读,遇到一个问题,直到他认为这个问题已经处理不再是个问题的时候,才进行下一步。

这是一个做事方法问题:这样无疑会导致整个进度的延缓。若我们一开始只关注整体结构(一个宏观的大概的流程),而忽略掉那些细支末节,则很有利。

那些可以忽略呢?

如有些函数一看函数名便知道是干什么的,没有要一开始便深入。

有些系统中的分支(如某此特殊场景下才执行的逻辑)、不重要的功能,则一扫而过

(6)其它

善用搜索引擎

先整体再局部,先宏观再微观,先流程再细节。

1.2.如何阅读大型项目的C++代码

章节0:了解文档

要搞清楚别人的代码,首先,你要了解代码涉及的领域知识,这是最重要的,不懂领域知识,只看代码本身,不可能搞的明白。

其次,你得找各种文档:需求文档(要做什么),设计文档(怎么做的),先搞清楚你即将要阅读是什么玩意,至少要把代码的整体结构搞清楚:整体架构如何,有几个模块,模块间通信方式,运行环境,构建工具等等。如果只关注一部分,重点关注将会属于你的模块,其他代码了解下即可

章节1:熟悉语法

熟悉C++语法与新特性

熟悉命名规范(变量 函数 类等) ->快速了解作用及含义, 有时通过名字可以看出设计模式等 不用深入探索源码也能知道含义 有文档说明最好 没有也可以靠时间与经验发掘.

章节2:摸清架构(需要拆细)

自上而下,了解全貌而非细节, 了解整个系统架构, 重点关注属于你的模块.

章节3:熟悉工具

熟悉相应的生成/测试工具 编译脚本等, 方便熟悉程序整体功能/流程.

章节4:细看模块(接口 算法需要拆细)

找到程序入口,自上而下抽丝剥茧.

章节5:输出产物

有目的性的阅读可以提高干劲,提前讨论好需要输出/补充的内容,按要求补充/输出成果物.

2.sylar项目的运行:

https://www.midlane.top/wiki/pages/viewpage.action?pageId=16416843

按照这个老哥的配置先把这个老哥的项目跑起来(这个项目跟sylar老师讲的差不多)

注意Boost和yaml-cpp的安装,其他安装照上面老哥的来

ubuntu下Boost安装:https://blog.csdn.net/qq_36666115/article/details/131015894

ubuntu下yaml-cpp安装与使用:https://www.cnblogs.com/zwjason/p/17031701.html

3.项目的流程或者结构理解:

作者主页:http://www.sylar.top

参考2:https://www.midlane.top/wiki/pages/viewpage.action?pageId=16416843

参考3:流程的理解,感觉这个会好一点:https://juejin.cn/post/7241821748211777593#heading-51

问题

  • [] 为什么用shared_ptr不用unique_ptr

About

基于协程的异步服务端程序开发框架

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published