经过短时间的折腾,为了解决上述问题,我对游戏进行一些简单的重构,以便能解决当前的瓶颈 添加了缓存服务器进行处理一些及时数据和配置数据,来缓解数据库的压力和IO的压力: 只能说解决当前的暂时性问题,但是测试发现当数据过多也会导致服务CUP和内存消耗比较大,所以还要进行下一步的重构.…
本人80后程序猿一枚,原来搞过C++/Java/C#,因为工作原因最后选择一直从事C#开发,因为读书时候对游戏一直比较感兴趣,机缘巧合公司做一个手游的项目,我就开始游戏服务器的折腾之旅. 游戏的构架是前端unity3d,服务端C#,数据库用SqlService.基础工作做完,就开始动工,因为前期考虑不周,所以暂定使用Http短链接进行,这也是导致后面服务器失败的根本原因之一,下面就说说前期最基础的构架: 就是最基础的构架,但是接下来由于游戏的细化,一些列的问题就出现了: 1.账号登陆的顶号问题如…
经过多次折腾之后,在一次进行了一次重大的重构,去解决问题 主要重构如下 1.将原来的单一协议修改多协议进行,一些查询.认证的功能都采用HTTP进行,避免全部采用TCP链接资源的消耗: 2.原来单一的部署,划分多个分布式的系统,添加怪物自动管理系统(怪物的刷新,配置等).后台服务系统(游戏过程中逻辑数据处理).webAPI查询认证系统(查询和认证).游戏后台辅助系统(主要监控其他项目的运行情况,用于容灾处理).缓存服务器(redis).数据服务器.资源服务器(配置文件): 现在基本解决了原来出现的…
在经过上述2番折腾之后,最后决定使用TCP进行通信,所以在一次进行重构 主要重构的要点 1.将过来的HTPP请求,重构为TCP请求: 2.使用组件FluenScheduler进行怪物的定时刷新,和定时处理数据: 3.所有游戏中的数据都保存在缓存服务器中,然后定规.定点的进行数据库操作: 4.在传输过程中,将原来的json转变为压缩后的2进制文件进行传输: 5.共享数据都采用广播,消除了很多轮训的请求: 在重构之后,项目有了明显的好转,CUP和内存的消耗都逐渐下降,但是也遇到一些问题: 1.偶尔会…
上文提到 搭建完成后 我们选择客户端的开源库进行连接 有以下三种选择 1 acl-redis 原因是支持VC 国产  作者博客   acl 框架库简介  用 acl 库编写高效的 C++ redis 客户端应用 代码支持VC编译 最好使用vc2008-vc2012编译,这样工程包含redis的示例. 我选择的是vc2017的工程图标打开工程的,所以没有示例 作者有中文博客 对该库有详细的介绍 还有QQ群可以进行讨论 技术支持比较强大. 但是问题在于 整个工程偏向C风格 居然是用自己的thread…
这里我们尝试在游戏服务器中的数据处理中使用redis 通过该系列文章能够学习 redis的基本操作 源码编译 客户端开源库的编译和使用 以及在游戏服务器中的缓存使用 作为初次摸索 尽量使得环境简单  我们在windows中运行redis进行学习 本来redis是不支持windows的网络模型 但是还是有微软魔改的版本 一个版本地址是 https://github.com/ServiceStack/redis-windows 看说明似乎使用了windows 子系统功能模拟了linux运行redis…
文章系列先介绍环境搭建 介绍redis操作和代码编写运行  这是典型的实战工程过程.那么我们为何要使用redis而不是常规的数据库比如 mysql呢? 因为KV内存数据库最大的优势所有数据全部存储在内存中,速度快,而且key-value的特点也决定了他良好的扩展性. 以下几点作为游戏服务器中的应用示例,更多的使用方法可以在实践中继续探索优化 1 数据库缓存 比如前一章节的用户数据,在mysql进行读写和redis上进行读写在大量并发访问的场景下,差别是很大的.Redis提供了较为丰富数据类型,使…
前言 前段时间由于公司的一款弱联网游戏急着上线,没能及时分享,现在基本做的差不多,剩下的就是测试阶段了(本来说元旦来分享一下服务器技术的).公司的这款游戏已经上线一年多了,在我来之前一直都是单机版本,由于人民群众的力量太强大,各种内购破解,刷体力,刷金币,刷钻石版本的出现,公司才决定将这款游戏转型为弱联网游戏,压制百分之八十的破解用户(毕竟原则上还是属于单机游戏,不可能做到百分之百的防破解),招了我这一个服务器来进行后台的开发.什么是弱联网游戏?在这之前我也没有做过弱联网游戏的服务器,但是按照我…
C++游戏服务器开发常用工具介绍 在软件开发过程中需要使用的工具类型实属众多,从需求建模到软件测试,从代码编译到工程管理,这些工具都对项目有着不可替代的作用.庄子有云,"吾生也有涯,而知也无涯,以有涯随无涯,殆已".代入到项目开发中就是说,如果对知识点无差别的全面攻击,不仅会导致所学甚泛却无一深入的尴尬,也会占用太多的有效时间从而影响项目进度.作为一个C++游戏服务器开发者来说,我们时刻肩负着线上游戏开发和维护任务,可以优先学习对自己工作最常用且最重要的,解决实际问题最为紧迫.本文对一…
摘要: 搭建了服务器环境 有了客户端 我们来假想下以下应用场景:我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用户信息对象数据,包含以下信息:用户ID,为查找的key,存储的value用户对象包含姓名userName,密码校验值passwordMD5,手机号码telephoneNum , 微信名称wechatName 等信息.将如何在redis中存储和操作? 搭建了服务器环境 有了客户端 我们来假想下以下应用场景: 我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用…