c++20协程框架
说明
仅用于学习使用
log库修改自 spdlog ,主要是为了学习下spdlog,实际项目请使用spdlog
协程部分参考自 cppcoro 以及asio的部分内容
游戏服务器的逻辑部分一般是单线程,因此,框架中的协程只会运行在一个单线程的调度器中 如果要用于一些其他通用的地方,可以实现一个任务窃取的协程调度器。c++的协程库还有 async_simple
除了协程的调度器,还提供一个可配置线程数的线程池,用于读写数据库、读写文件、异步的ai计算、异步的寻路等
此外,还有一个线程专门用于写日志文件,一个线程对日志进行lz4压缩,一个asio网络线程,一个检查共享内存通道的线程
服务为一个独立的功能,需要继承simple::service 实现 awake(),
如果需要每几帧调用一次某个逻辑,可以重写update(),并在配置文件中设置调用的间隔interval(帧)。
服务的动态库,需要导出两个函数分别为 xxx_create 和 xxx_release, xxx 为服务的类型名字与配置文件中的type对应。
可以参看config/test.toml
框架根据配置文件加载服务,所有的服务与协程调度器运行在同一个单线程中,由于协程并没有与服务进行绑定,因此不支持运行过程中关闭某个服务, 如果要通过替换dll来分批更新的:一个是将协程与服务进行绑定,服务退出时销毁所有绑定的协程;或者把有可能需要更新的单独放一个进程中
linux 和 mac 目前还没测试过
编译需要
vcpkg install protobuf
vcpkg install asio
vcpkg install fmt
vcpkg install kcp
vcpkg install lz4
vcpkg install openssl
vcpkg install toml11
vcpkg install gtest
vcpkg install mongo-cxx-driver[core]
可以使用命令vcpkg integrate install, 然后vs2022直接打开文件夹
或者在vs2022的开发者命令行中,使用下面的命令生成解决方案
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=XXX/vcpkg/scripts/buildsystems/vcpkg.cmake ..
运行例子
cd bin\Debug
.\executor.exe ..\..\config\test.toml
启动五子棋服务器(未完成)
.\executor.exe ..\..\config\server.toml
测试五子棋协议
.\executor.exe ..\..\config\client.toml