{"repo":"fish-tennis/gserver","free":true,"listed":false,"github":"https://github.com/fish-tennis/gserver","clone":"git clone https://github.com/fish-tennis/gserver.git","description":"a distributed game server framework,based on gnet and gentity 分布式游戏服务器框架","language":"Go","stars":51,"topics":["game","go","protobuf","server","gnet","distributed","golang","redis","mongodb"],"license":"MIT","category":"game-templates","readme_excerpt":"gserver 分布式游戏服务器框架 设计思路 - 类似gorm的数据绑定,使业务逻辑和数据库操作解耦 - 采用Entity-Component模式,尽可能使模块解耦 - 使用protobuf做通讯协议和数据序列化 - 玩家数据的存储接口可替换(mongodb,mysql,redis) - 工具生成辅助代码,提供更友好的调用接口 - 网络库使用github.com/fish-tennis/gnet 演示功能 - 服务器自动组网,负载均衡 - 客户端直连模式和网关模式可选,网关模式支持WebSocket - 一个账号同时只能登录一个服务器(数据一致性前提) - 游戏服宕机后重启,自动修复缓存数据,防止玩家数据回档 - 通过反射自动注册消息回调,事件响应接口(业务代码和网络库解耦) - 采用Entity-Component设计,模块解耦 - Entity事件分发 - 业务层和数据层分离,业务代码无需操作数据库和缓存 - 通过公会功能演示如何开发分布式的功能 - 通过公会功能演示服务器动态扩缩容的处理方式 - 服务器之间的rpc调用(类似grpc) - 任务模块,演示了如何实现一个通用且扩展性强的任务系统 - 容器模块,演示了常见的几种容器的实现(如道具背包,装备背包) - 物品使用接口 - 兑换模块,如购买物品,兑换礼包,领取奖励等 - 活动模块,演示了如何设计一个通用且支持扩展的活动模块 - 配置数据管理模块,同时支持csv和json,支持热更新 - 网络协议的消息号自动生成 - 离线玩家数据的处理 - 全局类的非玩家实体的通用接口 数据方案 玩家数据落地使用mongodb,玩家上线时,从mongodb拉取玩家数据,玩家下线时,把玩家数据保存到mongodb 缓存使用redis,玩家在线期间修改的数据,即时保存到redis,防止服务器crash导致数据丢失 gserver提供了数据绑定的方案,业务层只需要标记哪些数据需要保存,无需自己写代码操作数据库和redis 数据绑定 类似gorm(go Object Relation Mapping)对SQL进行对象映射,gserver使用的数据绑定对组件进行数据库和缓存的映射 使用go的struct tag,设置对象组件的字段,框架接口会自动对这些字段进行数据库读取保存和缓存更新,极大的简化了业务代码对数据库和缓存的操作 设置组件保存数据 支持明文方式保存数据 支持多个保存字段 消息回调,事件响应 支持自动注册消息回调,事件响应 rpc 协程 每个玩家分配一个独立的逻辑协程,玩家在自己的逻辑协程中执行只涉及自身数据的代码,无需加锁 运行 安装mongodb 安装redis,单机模式和集群模式均可 修改config目录下的配置文件 编译运行 测试 go控制台测试客户端gtestclient c#控制台测试客户端cshap client unity测试客户端unity client 编码规范参考 https://github.com/uber-go/guide https://github.com/xxjwxc/uber go guide cn 客户端网络库 C#: gnet csharp Excel表导出工具 excelexporter gserver的excel/tool目录下有编译好的执行程序 proto预处理工具 proto code gen 在gserver项目中负责生成配置数据的只读接口,自动生成网络协议号 proto文件修改后,运行proto\\tool\\generate proto go.bat ","default_branch":null,"files":null,"tree":[],"storefront":"/r/fish-tennis","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/fish-tennis/gserver/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}