# mqct
**Repository Path**: ALONE_WORK/mqct
## Basic Information
- **Project Name**: mqct
- **Description**: MQCT 全称 类消息队列传输协议(Message Queuing Class Transport )是利用单例模式、观察者模式、模板等 C++ 特性结合,实现应用内消息分发,是一种轻量级的发布/订阅消息传输协议。
- **Primary Language**: C++
- **License**: AGPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-05-28
- **Last Updated**: 2025-06-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# mmv
### 介绍
详情参考《[项目介绍](https://gitee.com/ALONE_WORK/mmv/wikis/Home)》
利用订阅模式、单例模式模式和模板结合,实现消息分发。
- 该项目解决类与类之间发送消息不便的问题
- 该库使用了同步消息和异步消息两种消息接口
- 从测试数据初步得出结论:一般的项目中不管是消息发送者或者是消息接受者,单个消息发送者或者接受应不超过 10000,超过 10000 后在绑定/解绑中将会耗时较多
### 仓库说明
1. 编译平台
1. Ubuntu
2. Windows
3. arm
4. aarch64
2. 编译方案(已通过)
1. Ubuntu:cmake
2. Ubuntu:configure
3. Windows:cmake+vs2019
4. arm:configure
5. aarch64:configure
### 编译说明
编译详情参考《[编译说明](https://gitee.com/ALONE_WORK/mmv/wikis/%E7%BC%96%E8%AF%91%E8%AF%B4%E6%98%8E)》
1. cmake [linux]
```sh
# 创建 build 用于保存编译中间文件
mkdir build
# 进入 build 文件夹
cd build
# cmake 生成 Makefile
cmake ..
# 编译
make
```
**注意**
example14 默认不编译,由于 example14 引用了 Qt 库,而有的 Qt 库还引用了其他库导致编译复杂。
1. cmake 启动 example14 编译
```sh
# cmake 生成 Makefile
cmake .. -DBUILD_EXAMPLE14=ON
```
2. Autotools 启动 example14 编译
```sh
# cmake 生成 Makefile
./configure --enable-example14
```
### 如何使用
详情参考《[使用说明](https://gitee.com/ALONE_WORK/mmv/wikis/%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E)》
```c++
// 1. 引用头文件
#include "center.hpp"
// 2. 定义消息,继承 BaseMessage 基类
class carrier : public BaseMessage
{
public:
string name;
};
// 3. 消息接收处理,继承 BaseHandle 基类
class recv1 : public BaseHandle
{
public:
recv1() {}
~recv1() {}
virtual bool handle(const carrier* msg) override;
};
bool recv1::handle(const carrier* msg)
{
cout << "carrier--> name: " << msg->name << endl;
return true;
}
// 4. 发送消息
int main()
{
recv1 r1;
carrier m1;
m1.name = "ljj";
m1.post();
return 0;
}
```
### 测试数据
详情参考《[测试数据](https://gitee.com/ALONE_WORK/mmv/wikis/%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE)》
#### send 同步消息测试
[测试代码](examples/example8/main.cpp)
| 接受者个数 | 发送消息耗时 | attach 耗时 | detach 耗时 |
| ------- | ----------- | ----------- | ---------- |
| 100 | 0.297582 ms | 0.508366 ms | 0.478572 ms|
| 1000 | 3.85406 ms | 19.194 ms | 32.7948 ms |
| 10000 | 32.2579 ms | 986.112 ms | 1637.23 ms |
| 100000 | 362.037 ms | 94973.2 ms | 162148 ms |
| 200000 | 780.409 ms | 380543 ms | 675723 ms |
#### post 异步消息测试
[测试代码](examples/example4/main.cpp)
| 接受者个数 | 发送消息耗时 | attach 耗时 | detach 耗时 |
| ------- | ----------- | ----------- | ---------- |
| 100 | 0.366451 ms | 0.491771 ms | 0.292666 ms|
| 1000 | 4.20467 ms | 20.4219 ms | 23.6889 ms |
| 10000 | 40.4584 ms | 1001.56 ms | 1664.87 ms |
| 100000 | 331.301 ms | 94117.2 ms | 160398 ms |
| 200000 | 809.291 ms | 394457 ms | 692483 ms |