# QPerf **Repository Path**: peternest/qperf ## Basic Information - **Project Name**: QPerf - **Description**: Qt框架开发的网络性能测试工具 - **Primary Language**: C++ - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 35 - **Created**: 2021-03-25 - **Last Updated**: 2021-03-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # QPerf (项目及文档持续完善中,欢迎加入。交流QQ群:972641491) ## ☸介绍 Qt5框架下使用[QtNet库](https://gitee.com/andwp/qt-socket) 开发的跨平台网络性能测试库。 ## ☸软件架构 ### ☃类设计
图1 主要类图
![Image 主要类图](doc/主要类图.png) #### ☂主要类说明 ##### ▶BaseState 状态基类 网络性能测试工具的状态抽象。此类是应用设计模式-状态模式的一个变体,解决各状态之间的业务耦合,各状态类可组合使用。 ##### ▶StateFactory 状态类创建工厂 封装各个状态的实现类。包括:`InitServerState`、 `StartServerState`、`InitClientState`、`InitServerState`、`StopState`等的对象实例创建。 ##### ▶PointerFactory 远端节点类创建工厂 封装各个远端节点实现类。包括:`FakeServerPointer`、`FakeClientPointer`、`PFPointer`。 ##### ▶BasePointer 远端节点基类 表示对远端节点的业务封装,一个远端节点可能是真实存在的,也可能是虚拟的(`FakeClientPointer`、 `FakeServerPointer`) ##### ▶Context 上下文 封装类的调用关系。控制状态切换。依赖`BasePointer`、`BaseState`。使用`PointerFactory`、`StateFactory` 创建需要的实例。 ##### ▶BaseTunnel 隧道基类 对通信隧道的封装,通信隧道可能是`TcpServer`、`TcpClient`、`Udp`的任一种封装。 ##### ▶PFPointer 真实远点节点类 封装真实的远端节点的类, ### ☃状态机设计
图2 服务端状态机设计
![Image 服务端状态机](doc/服务端状态图.png)
图3 客户端状态机设计
![Image 客户端状态机](doc/客户端状态图.png)
图4 服务端时序图
![Image 服务端时序图](doc/服务端时序图.png)
图5 客户端时序图
![Image 客户端时序图](doc/客户端时序图.png) ### ☃目录结构 - qtsocket QtNet通信库项目文件; - include QtNet通信库头文件; - src QtNet通信库实现文件; - netperf 网络性能测试工具(进行中); - perfunittest 性能测试工具的单元测试; - doc 文档相关。 ### ☃编码规范 #### 💚命名 - :pushpin: 文件名 所有源代码文件均使用全小写命名,源码文件的名称与文件中的类名称一致。 - :pushpin: 类命名 大写开头,遵从驼峰式命名法,使用英文名词对需要缩写的单词,不得超过三个连续的大写字母。 - :pushpin: 类方法命名 小写开头,遵从驼峰式命名法。 - :pushpin: 类成员命名 类成员使用`m_`开头,紧接着的单词以小写开头,并遵从驼峰式命名法。 - :pushpin: 属性命名 获取属性名称以对应的成员名称为准(去掉`m_`开头), 设置属性加入前置`set`,并接属性大写开头。 - :pushpin: 局部变量命名 局部变量以小写开头,遵从驼峰式命名法。 #### 💚注释 - :pencil2: 类注释 例子: ```cpp /** * @brief The CommandParser class * 解析命令参数。 */ ``` - :pencil2: 方法注释 例子: ```cpp /** * @brief cmdIPTuple 获取命令的IP五元组。 * @param dest 输出参数。 * @return 成功返回true。 */ ``` - :pencil2: 成员注释 例子: ```cpp int m_sampling; //数据采样率 int m_allowErrorCode; //允许数据包容错大小 QTime m_startTime; //启动时间 qint64 m_totalSampleCount; //读取到的总数据大小 ``` #### 💚代码格式 - :pencil2: if 条件 ```cpp if(condition) { dosth.. } ``` - :pencil2: while 循环 ```cpp while(condition) { dosth... } ``` 或 ```cpp do{ dosth... }while(condtion) ``` #### 💚文件编码 所有代码文件采用utf-8 带BOM头格式保存 #### 💚其它规范 - :pencil2:类的代码行数限定 500行以内 - :pencil2:类方法代码行数限定 50行以内 - :pencil2:类的继承层次不超过3层 - :pencil2:`while` `if-else` `switch-case` 等嵌套层次不能超过3层