c++开源消息服务器,GitHub - 63890390/breeze: 一个C++的轻量级的分布式服务器引擎, 架构思想为一切皆service....

Welcome to the breeze wiki!

breeze简述

68747470733a2f2f7472617669732d63692e6f72672f7a73756d6d65722f627265657a652e7376673f6272616e63683d6d6173746572

breeze是一个C++的轻量级的分布式服务器引擎, 架构思想为一切皆service.

breeze is a lightweight, fast, distributed server engine. greatly inspired by docker, bigworld and starwing/loki . the thoughts is " all is service ".

特点:

实现docker和service的核心代码约2000行, 简洁朴素.

使用C++11标准, 充分发挥shared_ptr,functional, lambda应有的作用, 结合C++异常和模板,在满足高性能与可靠性的前提下把易用性做到了接近lua这样的脚本语言的水平.

对开发者透明的分布式方案, 对业务开发者而言并不需要关心分布式本身, 但通过配置可以很灵活的调整服务器负载. (架构思想上可以参考skynet,bigworld,gce,nf等服务器引擎).

网络库使用zsummerX, 支持全平台,win/linux/mac/android/ios, 可以直接嵌入到移动平台的客户端中, 打通移动客户端到服务端的通讯, zsummerX的特性该服务器引擎全部支持(本来就是为了breeze写的).

协议序列化采用IDL工具生成的方案, 采用的开源库为proto4z. 通过xml配置文件生成原生的C++,lua,C#数据结构代码, 支持二进制协议和http协议, 并可以生成操作mysql的序列化/反序列化代码. 配合zsummerX可以很方便的在上述语言中混合通讯.

日志库使用log4z.

breeze的单组服务器设计容量在实际项目中, 轻度游戏10~100万同时在线, 有大量交互的模块和丰富的外围系统的中度/重度游戏1~10万+在线(瓶颈在于交互模块的单例service的负载能力, 通过对业务的把握尽量拆分更多的单例service, 转移负载到负载均衡的动态service上可以有效提升和突破这个上限), 数据库注册容量<=1000万(大于这个容量要考虑对数据库进行sharding, 垂直sharding直接根据业务进行分割, 添加更多的数据库service类型和配置即可, 而单表大于1000万需要水平sharding, 这个对dbhelper进行扩展后可以对业务层透明,但暂无需求 并没有去实现. , 另外需要注意减小不需要装载的service的驻留资源, 超规模使用资源不好挥霍的.).

核心模块介绍

docker:

docker是用来托管service的专用vm:

负责底层的网络通讯,多节点的网络拓扑构建, docker的多节点对上层透明化.

docker维护service和镜像service的创建,装载,卸载,销毁等管理操作.

service的负载均衡,容灾等处理.

上层只需关注docker所装载的service.

docker的资源消耗:

docker集群的socket数量开销= (docker个数的平方)*2

docker集群的总端口占用数量开销=docker个数的平方

service:

service是breeze引擎的核心结构, 通过包装对docker接口的再次包装, 实现 "all is service" 这一思想.

通过简单的toService即可把数据发往另外一个service而不需要关心对方装载在本地还是另外一个docker上.

通过sloting方法可以注册当前service可接收的消息类型和对应的处理方法

toService可以携带本地回调方法, 对方收到消息后通过backToService返回的消息可以直接在回调中处理.

创建一个service只需要集成该基类, 填写对应的onLoad onUnload等方法即可.

service的依赖关系通过简单的定义即可, docker会自动组织为正确的装载/卸载依赖拓扑图并据此进行装载和卸载等操作.

已实现的部分业务模块 (核心框架部分)

登录流程

已实现多角色账户的登录,创建用户,装载用户service, 切换用户客户端, 踢掉客户端, 卸载用户service, 离线消息, webservice, dbservice等.

DBService

直接操作数据库的的service, 每个db一个线程, 每个db对应一个service type.

所有运行中的数据库操作, info,log等 都需要走该service中专.

配合proto4z的mysql序列化方案, 可以一个调用实现增删改查, 而通过ModuleData的模板类, 则实现按照业务模块一键从数据库中load/create/update/insert等同步.

AvatarMgrService

玩家中心service, 用于玩家service的创建,装载,客户端认证通讯关联等.

也用于玩家管理,特别是离线玩家的管理(在线玩家可以直接server对service进行交互).

WebService

提供web 服务器/客户端相关服务.

通过配置可以在该service中直接处理来自web客户端的请求, 并可以处理来自内部的消息然后向外部发起web请求,并回调给来源(服务器gm后台实时查询管理接口, 向外部发起的渠道认证等需求均可满足).

两者均可做到动态负载均衡.

OfflineService

离线管理服务, 对于不在线的用户或者其他没有装载的非单例service, 均可以把本来要交给这些service已装载情况下要处理的消息通过该服务驻留到数据库和内存, 在这些service装载后该离线service会自动推送. 使用方法只是把toService中的Service Type转向到该离线管理服务即可.

DBDict

该字典类不属于docker和service, 是一个全局可直接访问的字典集合, 存储服务器引擎所有业务配置(字典) .

STWorldMgr

场景服务, 异构模块.

该服务为一个小型实时MOBA服务器. 包括场景管理服务和场景服务集群

目前已经实现作为一个moba游戏的核心框架和模块.

该服务器的实现初衷为复刻一个小型war3服务器,通过玩法定制实现WAR的各种自定义地图模式.

对应的客户端项目为breeze_unity3d_client

后续版本计划

对service和现有的utls公共小工具添加lua胶水代码, 并实现一套lua版的ModuleData来同步数据库, 这样就引擎的使用者可以自由决策逻辑层用lua还是C++ .

该计划的具体实现方案已有, 以及相应的性能,易用性和稳定性也均有可控的预期实现.

需求暂不强烈, 暂缓该计划的执行.

About The Author

Friend Open Source

NoahGameFrame

Author: ketoo

Description: A fast, scalable, distributed game server framework for C++, include actor library, network library,can be used as a real time multiplayer game engine ( MMO RPG ), which plan to support C#/Python/Lua script, and support Unity3d, Cocos2dx, FlashAir client access.

gce

Author: nousxiong

Description: The Game Communication Environment (GCE) is an actor model framework for online game development.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值