依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

【好消息,好消息,好消息】VIP会员可以发表文章赚积分啦 !
查看: 7|回复: 0

一个易用的跨平台框架,业务系统采用ECS设计,丰富的组件,网络模型采用iocp/epoll,协议采用protobuf,支持ipv4/ipv6等

[复制链接] 主动推送

2万

主题

2万

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22328
发表于 3 小时前 | 显示全部楼层 |阅读模式
一个易用的跨平台框架,业务系统采用ECS设计,丰富的组件,网络模型采用iocp/epoll,协议采用protobuf,支持ipv4/ipv6等

要求
要求具备C++11以上基础,以及一些C++20特性(module/c++20无栈协程/concept/requires, 了解c++20协程的一些基本关键字)
不为任何抽象付出不可接受的多余运行时性能损耗
快速构建
  • 编译器要求:GCC11以上(推荐GCC13以上)/Clang15以上/vs2022以上
  • Linux(scripts/builds/)

    • 支持Clang构建,且linux下默认使用clang构建,clang具有编译快生成的体积小且代码检查严格等特点
    • 构建: onekeybuild_linux.sh debug clean // 生成debug版本,在生成前clean表示清理原先生成的结果,默认不填写debug表示release版本或者显示指定release
    • 运行
      start.sh/stop.sh 运行或者关闭
      或者:linux_run.sh testsuit

  • Windows(scripts/builds/)

    • 构建:winsolution_build.bat (选择vs2022生成solution),请使用指定版本vs编译
    • 编译可以使用自动化脚本编译:winms_onekey_build.bat 默认选择vs2022构建, 如果没安装vs2022需要安装
    • start.bat/stop.bat 运行或者关闭
    • export LD_LIBRARY_PATH=/usr/libLD_LIBRARY_PATH 若提示mysqlclient找不到
    • 一键build(脚本默认使用vs2022, 并自动查询vs2022安装路径的MSBuild.exe), :scripts/builds/winms_onekey_vs2022_build.bat
    • 关于其他版本vs的一键build,可以模仿当前一键build很小的改动即可(不同的vs有不同的版本号来识别)
  • 导表工具

    • update_configs.bat/update_configs.sh
  • 协议导出工具

    • protoc.bat/protoc.sh


简介
  • 晶石框架是一个简易轻量的服务端框架,基于C++11及以上
  • 旨在开发出一套跨平台,代码简洁可读性高,执行高效的框架
  • 框架正在持续开发中,接受各种建议吐槽
  • Attention:region 注释会尽量使用简洁的英文,CI可能会报错哈QVQ
  • 多个重要组件移植于LLBCnlohmann/JsonOpenSSL, 再次感谢开源作者的贡献,开发过程中给予了我很大的帮助

特性
  • 采用iocp/epoll网络模型,跨windows/linux平台
  • 支持protobuf 3.21.9, 定制了protobuf协议生成器,自动生成c++/c#的协议代码, 支持基于protobuf的ORM,对protobuf生成的ormdata的数据修改会被自动标脏
  • 支持ipv4/ipv6
  • 支持session级别的packet限速
  • 支持openssl md5/sha1/aes等加解密,签名验签
  • 支持ECS设计,轻松设计大型复杂系统
  • 支持任意对象对象池,内存池,可以很轻松的进行内存管理
  • 支持tinyxml
  • 支持对zip文档解压
  • 支持对xlsx解析
  • 强大的日志系统
  • 丰富的组件支持
  • 支持Mysql 8.0存储, 不需要自行建表建库,支持自动建库建表, 支持标脏持久化, 自动存库,数据类型与大小自适应
  • 支持C++20 协程
  • 集成Lua-5.4.7 静态库
  • linux下支持so级别的热更(原理是在运行时使用dlopen重新加载so, 见PlugingMgr模块, 并采用数据和逻辑分离,逻辑写在so中, 数据定义在可执行程序中, so例子见TestServicePlugin模块),见热更原理介绍
  • 消息支持无锁队列(SPSC与MPMC), 跨线程消息投递高效
  • 工程默认引入yaml-cpp库(以静态库的形式), 支持yaml配置,见3rd/yaml/

热更原理
  • 组件构成
    • ShareLibraryLoader: 动态库加载组件, 作为组件嵌入到PluginMgr中, 用于加载指定的动态库
      LibraryHotfixMonitor: 动态库热更监控组件, 作为组件嵌入到Application中,用于监控是否有动态库需要热更,
      PluginMgr: 用于管理插件集, 作为组件嵌入到MyTestService中

  • 流程图

一个易用的跨平台框架,业务系统采用ECS设计,丰富的组件,网络模型采用iocp/epoll,协议采用protobuf,支 ...

一个易用的跨平台框架,业务系统采用ECS设计,丰富的组件,网络模型采用iocp/epoll,协议采用protobuf,支  ...


  • 插件集热更脚本
  1. # **.sh 可执行程序名 可执行程序编译版本 插件集HotfixKey 要热更的插件集so文件名
  2. sh ./scripts/hotfix/hotfix.sh testsuit debug TestPlugin libTestPlugin2.so
复制代码



性能(见doc/压测/)
  1. 1. 16C32G机器,ini配置1个service, 网络层2个datatransfer poller, qps:26w/s, 客户端延迟:最大<200ms, 平均:150ms
  2. 2. 32c64G机器,ini配置6个service,网络层每个service1个datatransfer poller, 总的qps:52w/s, 客户端延迟:最大<200ms, 平均:150ms
复制代码
注意
  • windows下需要开启开发者模式(设置=>更新与安全=>开发者选项),避免bat相关cmd失败
  • 所有静态库都需要添加-fPIC编译, 避免无法识别到符号的编译问题
  • 由于协程在初始化的时候会将参数,局部变量保存到协程上下文中, 参数如果是引用的也会以引用的形式保存,所以请务必注意参数和局部变量的生命周期问题, 建议使用智能指针
  • 尽量避免提交二进制文件到git上,会导致仓库膨胀,二进制文件不是存储文件差异而是整个文件存下来,每次提交都会整个文件存下来会导致仓库体积膨胀
  • windows下kernel不生成dll,而是把代码插入到exe工程中
  • 使用ECS时千万警惕循环依赖:A <= B <= A <= ... 循环往复把系统资源耗光
  • 注意如果基类的命名空间与派生类的命名空间不同,则不可以使用Comp(), 不可以使用基类类型来获取对象,因为注册的时候是根据派生类全名来推导基类名并注册进去的
  • 在模版函数中的lambda表达式中调用inline函数且该函数带有局部的static变量有可能导致变量多次初始化
  • linux 内核版本3.9.0以上才有reuseport特性
  • windows 下dll, exe拥有各自的堆栈空间,各自的全局变量都会各自初始化,所以注意全局变量以及static变量可能出现的重复初始化以及释放问题,建议为了只使用一个堆栈空间,windows下一个程序只有一个exe不依赖dll或者说依赖dll,但是不依赖dll中的全局变量
  • thread_local 关键字 gcc 8.0以下有bug,相关连接:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60702
  • 对于core,请不要使用try catch去处理异常,让系统输出core_dump的因为linux 的core_dump可以输出比较全面的崩溃时的数据,而如果仅仅在try catch去使用backtrace打印堆栈信息,是有缺陷的无法还原崩溃时的信息,导致解决错误的困难
  • gcc 需要支持8.3及以上,建议切换到tencent os 3 因为默认支持gcc 8.3
  • CXX11 ABI兼容性 请设置编译选项_GLIBCXX_USE_CXX11_ABI=1 放弃兼容gcc 5.x以下版本
  • 由于github单文件100MB 限制的原因,对3rd/kernel 3rd/protobuf/lib 两个目录库超过100MB文件进行了partition拆分,编译时会自动合并
  • 框架层不可以抛异常,只能使用错误码或者bool, 需不需要异常要上层决定,一般不建议抛异常即使是上层
  • 数据库应该采用参数化查询来放置SQL注入攻击
  • 关于关闭基于Application的引用, 可以在应用所在目录放入和应用同名后缀加上 .kill_进程id 的后缀其中进程id是当前允许程序的进程id,当使用工具执行关服时, 会创建这样的一个文件,app会监控到有这个文件就会执行关闭操作,也可以使用Ctrl + C进行常规的关闭,windows下不支持点击关闭窗口来关服,因为会导致数据丢失
  • 多使用分支预测,可以提前加载预测为真的代码,提升性能
  • DisableTruncateDB 线上的时候必须设置成1, 避免手残更改版本号导致清库
  • Mysql windows下是大小写不敏感(表名和数据库名), 所以即使表名在建表时有大小写之分也会在建表后变成小写,为了兼容linux/windows的统一,数据库和表名都使用小写,字段名是区分大小写
  • 日志开启控制台打印会比较大的影响到性能, 酌情开启,linux下应该禁止开启控制台打印
  • windows下编码等请设置系统编码格式为UTF8, 以便在代码编辑时可以使用utf8对字符串正常编码
  • 对模板, 内联需要保持敬畏之心,因为会导致代码膨胀, 编译时间无法容忍, 除非过度到c++20采用module, 否则避免过度设计,应该运用巧妙的方式弥补性能上的担忧, 以及在没必要关心性能的部分代码审慎使用模板与内联, 鼓励使用代码生成工具来替代
  • 项目头文件中不可直接include kernel.h等比较大的库头文件,应该在实现文件中include
  • 使用协程一定注意对象的生命周期
  • 如果需要在so中使用库, 则需要在编译so的时候打开PROG_USE_SO的宏定义, 因为对象池或者内存池需要追踪这些对象以便定位内存泄漏问题
  • linux so热更时需要显示的销毁全局变量, 避免内存泄漏


链接: https://pan.baidu.com/s/1q5fsmB7ezDn1Hj3gbsSs2A

提取码下载:
文件名称:提取码下载.txt 
下载次数:0  文件大小:16 Bytes  售价:19金钱 [记录]
下载权限: 不限 [购买VIP]   [充值]   [在线充值]   【VIP会员6折;永久VIP4折】
安全检测,请放心下载





相关帖子

扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员6折;永久VIP4折
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性,由于源码具有复制性,一经售出,概不退换。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|小黑屋|依星资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2025-12-28 23:29

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表