从毕业到现在,在游戏服务端开发工作已经有半年多的时间,从一个小小白,到现在初步入门。这半年项目的工作超忙,把这博客都给荒废了…这篇小博文,就简单梳理下,这半年开发过程中关于游戏服务端防御性编程的小心得。

  1. 指针判空
      这条果断放第一位!在学生时代,这些都是书面上的概念,大家也都懂,但是,估计也都没怎么注意到过其真正的高危险性。作为一名C++游戏服务端开发者,工作过一段时间后一定都深有体会,这个指针判空是有多重要。在服务端的所有宕机事件中,大部分的罪魁祸首都是空指针,所以,遇到指针就判,这是作为服务端开发必须要形成的编程习惯。
      
  2. 不要相信策划
      不要相信策划,指的是不要相信策划配的数值。比如,策划配的数值会不会是0?会不会配的很大,超出了数值上限?会不会配置了一写非法的字符串?配置格式是不是会出错等等。在编程时一定要做好这些防御性编程,不然如果由于策划的一个不小心配错,导致出现线上bug或者直接导致宕机,这将是非常不划算的。

  3. 上行消息的合法性验证
      对于上行消息的判断,是非常重要的。绝大部分MMO游戏的验证逻辑都是在服务端,要杜绝外挂,对上行消息的判断就是重要的一环。方便说明,以protobuf消息格式来讲。
      如果消息里面有repeated字段,先判断下这个repeated字段的长度,如果超过设定的上限,则直接返回错误。这可以防止外挂恶意填错超长的字段上来
      如果是对客户端请求的物品列表的有效性进行验证,比如a、b、c几个道具兑换一个d道具类的功能。在客户端的上行消息判断时,需要判断下消息里面的物品id是否存在重复项。

  4. 逻辑功能的处理顺序
      对于诸如道具兑换类的操作,一般流程都是先进行各种合法性验证,然后一定要先进行道具的扣除,然后日志输出,然后才能开始给道具。不能先给完道具再去扣除道具。
      
      
      

游戏服务端开发之防御性编程相关推荐

  1. 【云风skynet】详解skynet的多核高并发编程丨actor模型丨游戏开发丨游戏服务端开发丨多线程丨Linux服务器开发丨后端开发

    skynet中多核高并发编程给我们的启发 1. 多核并发编程 2. actor模型详解 3. 手撕一个万人同时在线游戏 视频讲解如下,点击观看: [云风skynet]详解skynet的多核高并发编程丨 ...

  2. 百万在线:大型游戏服务端开发

    进入手游时代,服务端技术也在向前演进.现代游戏服务端既要承载数以万计的在线玩家,又要适应快速变化的市场需求,因此,如何设计合适的架构就成了重中之重.服务端技术并不简单,作为服务端新人,全面掌握服务端技 ...

  3. 速游面经(游戏服务端开发工程师)

    一面:9.15,线下面 一面更像HR面,是一个女面试官,应该是HR,不是技术官,问的专业知识也很浅,没有深挖 我们这个这个岗位是需要转语言的,可以接受吗?(转Erlang) 你的GPA挺高的,平时是怎 ...

  4. Java游戏服务端开发系列文章

    已经好久没有更新自己的学习状态.或许是工作太忙吧,生活被工作羁绊,无法抽身.最近因为某些事情的原因,工作上有点充裕的时间来分享自己的一点小小经验.因为毕竟我也是一个混迹职场几年了 虽然天资不咋地,但是 ...

  5. Java游戏服务端开发之开课了

    从今天开始我将会重新的做一个专栏.这个专栏是专门为新手讲解游戏服务端开发的文章系列.同时也是将自己多年的经验做一个系统的分享. 通过这个系列大家可以掌握到一个游戏开发中的一些概率以及在线游戏服务器所包 ...

  6. 游戏服务端开发-排行榜

    开头 排行榜几乎是每个网络游戏都有的系统,以下用Erlang以例,分享一种排行榜实现方式. 结构 每个排行榜对应一个actor,State使用如下结构: %% 通用排行榜结构 -record(rank ...

  7. docker mysql开发环境_跟我一步一步用Docker搭建Beimi游戏服务端开发环境

    跟我一步一步用Docker搭建Beimi游戏服务端开发环境 Stone 摘要 本文为java 0基础的小伙伴介绍如何用Docker搭建开发环境.如果不关心过程直接可 跳到本文最后取代码. 关键步骤为: ...

  8. 游戏服务端开发-AOI-九宫格法解析(附代码)

    1-啥是AOI AOI全称Area Of Interest,中文就是感兴趣的区域,个人理解就是玩家关注的并且可视的地图区域. 在RPG游戏中,玩家角色移动,攻击,放技能等操作都需要向其他玩家广播,但服 ...

  9. 游戏服务端开发-全局唯一ID

    结构 | PlatId (10bit) | ServerId (12bit) | UnixTime(s) (32bit) | IncreaseId (10bit) | | 平台id (10bit) | ...

最新文章

  1. Blender创作你自己的动画短片学习教程
  2. 1.2控制台的大体设置:
  3. AppSwiper让iphone5快速关闭后台应用
  4. 这个开源项目...看了就停不下来啊!
  5. Java 文件及文件夹复制
  6. 子组件是表格时向父组件传值
  7. 在离线环境中发布.NET Core至Windows Server 2008
  8. PHP array_pad()函数与示例
  9. TAOCP-1.2.10_求极大值
  10. 如何将asp.net MVC2项目升级为MVC3项目(微软官方自动升级工具:ASP.NET MVC 3 Application Upgrader )...
  11. 真人发音计算机在线用,文字转语音真人发声在线怎么转换?这种操作最简单
  12. 总结:OSI七层协议
  13. 用好这些小工具,基金可以更赚钱
  14. 手机共享计算机网络连接,终于找到电脑网络共享给手机
  15. JavaEE学习记录Day08、09、10
  16. 股权模板:72套股权分配方案
  17. 计算机实战项目、毕业设计、课程设计之[含论文+辩论PPT+源码等]微信小程序社区疫情防控+后台管理|前后分离VUE[包运行成功
  18. iphone连接linux系统电脑,为什么iphone连不上电脑 多种解决方法【图文教程】
  19. 【网络攻防原理与技术】第3章:网络侦察技术
  20. Unity导入图片报错File could not be read

热门文章

  1. qq自带表情包是用html做的吗,腾讯表情设计师:3D版的QQ黄脸表情是这样做出来的...
  2. 3GGO够酷够绚,但仅支持Nokia
  3. 计算机图形学曲线算法代码,计算机图形学自由曲线绘制算法.doc
  4. sklearn 的 knn 用法
  5. Python 详解箱型图法剔除异常值
  6. DLP数据丢失防护/数据防泄漏 隐私保护概念解析
  7. 牛客国庆集训派对Day6 I.清明梦超能力者黄YY(树剖)
  8. 联想谋求主动转型,陈旭东的压力与乐观
  9. Naive UI 之 修改组件样式
  10. 从零手写操作系统之RVOS内存管理模块简单实现-02