Bohan 是一个自研的 C++ 高性能网络服务器框架,支持多线程、线程池、定时器和 TCP 网络通信。适用于构建即时通讯服务器、游戏服务器等需要高并发处理能力的场景。
- 多线程支持:基于
std::thread的跨平台线程封装 - 线程池:高效的任务调度和线程复用机制
- 定时器:支持周期定时器和重复定时器
- 网络库:基于事件驱动的 TCP 网络通信
- 跨平台:支持 Windows、Linux、macOS
- Protocol Buffers:集成 Protobuf 协议支持
Bohan/
├── bohan/
│ ├── base/ # 基础库模块
│ │ ├── ThreadPool.h # 线程池
│ │ ├── Timer.h # 定时器
│ │ ├── BlockQueue.h # 阻塞队列
│ │ ├── HashMap.h # 线程安全的哈希表
│ │ ├── Lock.h # 锁封装
│ │ ├── Singleton.h # 单例模式
│ │ ├── Util.h # 工具函数
│ │ ├── Timer.h # 定时器
│ │ ├── SimpleBuffer.h # 简单缓冲区
│ │ ├── PackageBase.h # 协议包基础
│ │ └── ...
│ ├── net/ # 网络库模块
│ │ ├── Connection.h # TCP 连接封装
│ │ ├── BaseSocket.h # Socket 基础类
│ │ ├── EventDispatch.h# 事件分发器
│ │ └── NetCoreLib.h # 网络核心库
│ ├── MsgServer/ # 消息服务器示例
│ │ ├── MsgConn.h # 消息连接处理
│ │ ├── UserInfo.h # 用户信息管理
│ │ └── ServerDefine.h # 服务器定义
│ └── examples/ # 示例代码
│ ├── server/ # TCP 服务器示例
│ └── client/ # TCP 客户端示例
└── CMakeLists.txt # CMake 构建配置
┌─────────────────────────────────────────────────────────────────┐
│ Application Layer │
│ (MsgServer / examples) │
├─────────────────────────────────────────────────────────────────┤
│ Network Layer │
│ ┌─────────────┬─────────────┬─────────────┬─────────────────┐ │
│ │ Connection │ BaseSocket │EventDispatch│ NetCoreLib │ │
│ │ TCP 连接 │ Socket 封装 │ 事件分发器 │ 网络核心库 │ │
│ └─────────────┴─────────────┴─────────────┴─────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ Infrastructure Layer │
│ ┌──────────┬──────────┬──────────┬──────────┬───────────────┐ │
│ │ThreadPool│ Timer │BlockQueue│ HashMap │ Lock │ │
│ │ 线程池 │ 定时器 │ 阻塞队列 │ 哈希表 │ 锁封装 │ │
│ └──────────┴──────────┴──────────┴──────────┴───────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ System Layer │
│ pthread / std::thread / mutex / condition │
└─────────────────────────────────────────────────────────────────┘
| 类名 | 说明 | 主要功能 |
|---|---|---|
ThreadPool |
线程池 | 管理固定数量的工作线程,支持任务提交和异步执行 |
Timer |
定时器 | 支持周期定时器、重复定时器,基于优先级队列实现 |
BlockQueue<T> |
阻塞队列 | 线程安全的阻塞队列,支持生产者 - 消费者模式 |
Hash_Map<K,V> |
哈希表 | 线程安全的哈希表封装 |
CLock / AutoLock |
锁 | RAII 风格的自动锁 |
Singleton<T> |
单例 | 线程安全的单例模式实现 |
SimpleBuffer |
缓冲区 | 简单的内存缓冲区管理 |
PackageBase |
协议包 | 网络协议包的封包和拆包 |
| 类名 | 说明 | 主要功能 |
|---|---|---|
BaseSocket |
Socket 基类 | 封装 Socket 基础操作,支持 TCP 服务端和客户端 |
Connection |
连接类 | TCP 连接封装,支持数据收发和回调 |
TcpSocketCallback |
Socket 回调 | 虚接口,定义连接事件回调 |
EventDispatch |
事件分发器 | 单例模式,管理 Socket 事件、定时器、循环事件 |
| 类名 | 说明 | 主要功能 |
|---|---|---|
MsgConn |
消息连接 | 继承 Connection,处理消息连接逻辑 |
UserInfo |
用户信息 | 管理用户登录状态、连接信息 |
UserInfoManager |
用户管理器 | 单例模式,管理所有在线用户 |
- C++17 或更高版本
- CMake 3.10.2 或更高版本
- Windows: Visual Studio 2019+ / MinGW
- Linux: g++ 7+
- macOS: Clang 7+
cd bohan
mkdir build
cd build
cmake ..
make # Windows 上可使用 cmake --build . --config Release#include "ThreadPool.h"
using namespace bohan;
int main() {
ThreadPool pool(4); // 创建 4 个线程
pool.addTask([](){
printf("任务执行中\n");
});
return 0;
}#include "Timer.h"
using namespace bohan;
int main() {
Timer timer(1);
timer.StartLoop();
// 添加周期定时器,每 1000ms 执行一次
timer.AddPeriodTimer(1000, [](){
printf("定时器触发\n");
});
std::this_thread::sleep_for(std::chrono::seconds(10));
return 0;
}#include "net/Connection.h"
using namespace bohan;
class MyConnection : public Connection {
void OnNewConn(socket_handle handle) override {
printf("新连接:%d\n", handle);
}
void OnReceiveData(const char* data, int32_t size) override {
printf("收到数据:%s\n", data);
}
};
int main() {
MyConnection conn;
// 监听端口
// ...
return 0;
}┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
│ length │ version │ flag │serviceId│commandId│ seqNum │
│ 4 bytes │ 2 bytes │ 2 bytes │ 2 bytes │ 2 bytes │ 2 bytes │
└─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘
- 线程安全:所有共享数据结构都使用互斥锁保护
- RAII 资源管理:使用智能指针和自动锁管理资源
- 事件驱动:基于 epoll/kqueue/IOCP 的事件驱动模型
- 零拷贝设计:使用 SimpleBuffer 减少内存拷贝
- 跨平台兼容:统一的跨平台接口封装
MIT License
bohan.lj