用于搭建高性能、全异步(a)、树形结构(t)的BUS消息系统的跨平台框架库
Target System | Toolchain | Note |
---|---|---|
Linux | GCC | |
Linux | Clang | With libc++ |
Linux | GCC 4.8 | |
MinGW64 | GCC | Dynamic linking |
Windows | Visual Studio 2022 | Static linking |
Windows | Visual Studio 2022 | Dynamic linking |
Windows | Visual Studio 2019 | Static linking |
macOS | AppleClang | With libc++ |
支持c++0x或c++11的编译器(为了代码尽量简洁,特别是少做无意义的平台兼容,依赖部分 C11和C++11的功能,所以不支持过低版本的编译器)
- GCC: 4.8 及以上
- Clang: 3.8 及以上
- VC: 12 及以上
cmake 3.16.0 以上
现有很多框架都是32位(比如腾讯的tbus和云风的skynet),在服务类型比较多的时候必须小心设计服务ID,以免冲突。
当然也有考虑到以后可能会扩展为带Hash的字符串,所以在编译选项上做了预留。但是目前还是uint64_t
同样,新增节点和移除节点也不需要做什么特别的初始化操作。不会影响到已经在线上的服务。
如果N个节点两两互联,每个节点可以只拥有一个(共享)内存通道。即总共只有N个通道,内存消耗为N*每个通道内存占用
一些其他的系统(比如tbus和我们目前的服务器框架)如果N个节点两两互联,每两个节点之间都要创建(共享)内存通道。即总共只有NN个通道,内存消耗为NN*每个通道内存占用。非常浪费
比如 0x12345678 可以控制的子节点有16位(0x12345678/16),那么0x12340000-0x1234FFFF都可以注册为它的子节点。
如同IP协议中 192.168.1.1/24 路由表能管理 192.168.1.0-192.168.1.255 一样。当然这里的24指前24位,而前面提到的16指后16位。
这么简化以后很多节点关系维护和通信都能简单很多并且能提高性能。
使用cmake标准构建方式,默认的编译目标为Debug版本,详见 使用(编译)流程
注意: 默认的编译选项是Debug模式,压测和正式环境请使用 cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo 源码目录 [其他选项] 编译(相当于gcc -O2 -g -ggdb -DNDEBUG -Wall -Werror或MSVC /O2)
注意: Windows下私有共享内存不允许跨进程共享,公有共享内存必须有管理员权限。如果Windows下出现初始化共享内存错误请使用管理员权限运行。
简要的使用示例见 使用示例
更加详细的请参考单元测试和tools目录内的代码
压力测试和对比见docs/Benchmark.md
Linux下 GCC编译安装脚本(支持离线编译安装):