美文网首页
关于游戏服务器开发的一些反思

关于游戏服务器开发的一些反思

作者: 46fdc45388ac | 来源:发表于2017-06-09 17:53 被阅读182次

  我对于游戏开发,其实是有过实践经验的。13-14年间,在12m的时候,我就是12m的游戏开发主程(虽然当时后台只有2个人,而且我还是处于完全没有游戏开发经验没人指导的愣逼状态 囧),当时服务器的代码,是基于一个非常简陋的netty框架搭起来的,从登录到所有游戏逻辑,几乎都是从0开始自己写。之前也没有写游戏服务器的经验,项目中可参考的内容也基本没有,当时对于架构认识也有限,历经半年多,磕磕碰碰,也总算是把后台逻辑写得差不多了,成功上线。从登录到游戏到比赛到活动,一个简单页游所需要的东西基本也都有了。游戏当时也没有做成功,推广不得力再加之股东纠纷。当时所遇到的一个比较严重的问题是服务器承载的问题,因为游戏模式是模拟足球比赛,一场比赛持续5分钟会涉及到7200帧的计算,再加上数据库读写,资源损耗较多。模糊记得,当时努力做各种优化过后,手写机器人简单测试中,8G的服务器,三四百人同时开始打比赛就会有严重卡顿。当时也竭尽全力想各种办法,提高比赛帧的计算效率,优化数据库表设计、连接以及读写,可最终效果都有限。

从6月1号到新公司这边来,一直在研读手头的游戏代码,也做完了3个新需求。弄清楚手头的棋牌游戏逻辑后,不经感叹以前设计游戏时的经验浅薄。在通读了现在游戏代码后,回想以前设计的足球游戏代码,发现在如下几点上存在严重缺陷。

1.当时设计的游戏逻辑和数据库读写没有分离,导致的结果是数据库在机器性能吃紧造成读写延迟高时会把延迟反馈到游戏中,导致严重的游戏卡顿。如果要做优化,应该让游戏逻辑仅依赖于内存数据,需要写入数据库的内容由独立线程单独处理。这个设计缺陷应该是当时代码中最大的问题,因为这个缺陷存在,会同时影响到游戏帧计算速度,游戏帧计算速度过慢又会连锁带来线程释放慢而导致需要的线程过多的问题。

2.对于异步数据以及资源共享访问的设计考虑不完善。现在还记得,当时多用户抢桌子时因为资源竞争带来的诸多奇奇怪怪的bug,当时也尝试各种办法甚至于添加各种补救逻辑,但是最终对于资源抢夺的逻辑解决的也不是很好。反观公司的代码,一个ConcurrentHashMap和synchronized就解决了所有问题。当然,以前代码的那块需求比公司现在的更为复杂,但是究其最终没有很好解决的原因,还是对于synchronized理解不到位的。

3.没有扩服设计。即便服务器性能差,如果有扩服设计,也是可以通过增值硬件采用空间换资源策略来解决的。但是以前压根儿没想过这一点。通读代码下来,其实做简单的扩服设计也是很容易的,而且现在回想当时拿到的的netty封装代码,其实已经有对扩服的支持。扩服时,需要考虑的一个问题就是数据同步的问题。当前棋牌的设计,是以桌子为单位分配服务器,所以避开了数据共享的问题。如果真要面对数据共享的问题,有几个可以考虑的方案是,数据库、memcached或redis。其中redis应该是主流,memcached应该是简易版。

4.部署容器的选择。这一点没有验证,但是感觉应该也是以前的一大失误。应该用jetty而非tomcat的。jetty对于大量请求以及时间比较长的连接支持有优化,对于契合情景下的性能能有一定程度提升。

主要就是上面4点设计缺陷吧。如果还要说有什么其他问题,可能就是我动手前没有完全吃透需求,没有把逻辑内容进行很好抽象后再动手的毛病。这个毛病会因为总有遗漏而老导致代码变动从而导致代码质量下降。

上面这一些都是问题。其实通读下来,游戏开发和所谓的优秀的设计并没有想象中那么难。你所需要做的,就是更扎实的基础理解以及更多的耐心。

相关文章

  • 关于游戏服务器开发的一些反思

    我对于游戏开发,其实是有过实践经验的。13-14年间,在12m的时候,我就是12m的游戏开发主程(虽然当时后台只...

  • 游戏服务器需要学习哪些知识(Java)

    为什么游戏服务器很多都用Java开发 Java 做游戏服务器开发的优势还是很多的,《我的世界》的服务器就是Java...

  • 游戏服务器开发都要学什么

    一、游戏服务器开发工作介绍 有很多朋友会问我,想从其它开发领域转到游戏服务器开发上来,需要学什么? 或许是因为游戏...

  • 游戏服务器背包设计与开发

    在游戏开发中,游戏背包是一个非常重要的功能,游戏服务器背包设计是的非常重要的,它要防止一些bug。几乎每个复杂点的...

  • 如何选择游戏服务器

    如何选择游戏服务器 随着科技的发展,人们对游戏的要求越来越高,选择好的服务器才会吸引玩家。 开发手机游戏对服务器要...

  • cpp开发岗位应聘准备

    keep calm and carry on 方向 传统桌面开发, 客户端开发服务器后台开发游戏开发(后台)转其他...

  • 独立游戏开发者应该如何开发服务端?

    step1:具备网络游戏开发的基础:编程语言+数据结构+网络+协议+数据库 step2: 为游戏服务器选一些可用的...

  • 2018-08-21 Day2-python语法基础

    Python就业领域 服务器端应用开发 - 网站服务器/游戏服务器Django / Flask / Tornado...

  • 关于狼人杀游戏的一些反思

    狼人杀属于杀人游戏的升级版,比较烧脑。我初识这个游戏是通过朋友圈。在北京上海工作的朋友发了相关状态,我才知道现在又...

  • 单服架构

    前言 毕业至今一直比较多接触单服架构的游戏服务器开发,借这篇文章总结自己使用erlang开发单服架构游戏服务器的经...

网友评论

      本文标题:关于游戏服务器开发的一些反思

      本文链接:https://www.haomeiwen.com/subject/gapxqxtx.html