游戏服务端承担着游戏复杂业务逻辑实现,玩家数据持久化等重要作用。作为一个合格的服务端业务狗,我们有必要遵守一些好的防御手段,让自己的代码少踩些坑。或者当出现了bug,能够在第一时间进行抢救。

下边一些开发原则是我的经验总结,欢迎补充,不喜轻喷o(^_^)o

  • 检查玩家请求数据的有效性
不管是做web后端,还是游戏后端开发,我们都要检查客户端请求数据的有效性。举个栗子,假设玩家在商店买了一个道具XX,数量为100。对于上传到服务端的参数,例如所购买的道具id和购买数量,我们需要重点检查购买数量参数。总不能玩家说要买100个,但是玩家的金币只能购买10个,服务端就傻傻地给了玩家100个道具吧!
有经验的程序员总是不厌其烦地告诉新手程序员,必须对传入函数的参数进行有效性检测。类似地,我们也必须对玩家的各种请求参数进行检测。很多外挂工具可以直接模拟游戏上一次发包内容,甚至通过对数据的分析进行参数篡改。所以,我们对于直接处理用户请求消息的逻辑方法,应该进行相关有效性检查。
  • 重视行为日志
策划童鞋的脑洞很活跃,有时一些业务流程性非常强,要达到目标往往需要多个步骤有序地完成。我们做开发的,在面对一些强流程性或者数据比较重要的逻辑,一定不要吝啬留下行为日志。打多点日志,出了问题,即使测试人员无法重现,我们也可以根据日志以及代码逻辑发现问题。
当然,打日志也是有技巧的。由于日志是给开发人员自己调试排错的,我们没必要像写作文一样下笔有神,我们只要打印一些关键的行为字眼

游戏服务器之防御式开发相关推荐

  1. 学前端到了CSS阶段,你一定要掌握这9大防御式开发技能

    一.什么是防御式编程 防御性编程是一种细致.谨慎的编程方法(习惯).我们在写代码时常会有"以防万一"的心态,把以防万一有可能出现的情况提前考虑进去,规避以免以防万一出现带来的问题. ...

  2. PHP游戏服务器之GlobalData组件的运用

    众所周之,服务器的设计永远不能依赖于单进程/单线程,由于PHP本质上是不支持多线程的,所以在开发过程中,只能把不同的逻辑或者用户分发到不同的进程之间进行处理(这是由系统自己调用分发的).由此可知道在游 ...

  3. LINUX 游戏服务器之旅4_mongodb环境

    安装mongodb 1. 下载MongoDB,此处下载的版本是:mongodb-Linux-i686-3.0.2 http://fastdl.mongodb.org/ 2. 解压文件到某目录下,然后重 ...

  4. 游戏服务器之Timer计时器(定时器)动态链接库【超联网】

    对于游戏服务器而言,计时器(每个多长时间触发一次)和定时器(定点触发)是不可或缺的一个组件.而计时器和定时器的做法又有很多种,我大致将其分成3中: 1,非线程实现计时器和定时器: 2,单线程实现计时器 ...

  5. 游戏服务器之防加速器

    加速器是网页类游戏常使用的通过修改前端帧频率来达到加速操作目的的工具,常用的有游戏浏览器等.所以前端的时间会变得很快或者很慢(跟后端的比较). 防加速器设计上: 在网关服务器里限制连接发来(客户端发来 ...

  6. mysql 游戏服务器设计_游戏服务器之基于文件数据库和mysql数据库的db服务器设计...

    设计上: (1)文件数据库是用于处理游戏逻辑业务请求. (2)mysql数据库是用于处理运营后台查询请求. (3)备份业务是用于定时备份文件数据库文件. 本文目录: 1.角色数据更新请求 2.mysq ...

  7. 游戏服务器之存档读档

    设计上: (1)存档方式 定时器在一定范围的分钟内随机存档一次,为了避免集中式存档 第一次需要全部存档一次,因为需要存档版本字段 分标签实时存档设置了标签的数据,减少每次存档数据 (2)压缩处理 档案 ...

  8. 游戏服务器之python短连接服务器(登录服务器)

    以自定义的登录协议来作为网络接收,在根据事件号来回调处理登录消息.以此来说明下使用twisted的反应器和自定义的udp协议来具体处理应用. 1.登录服务器及其处理协议 登录服务器对象,处理登录协议请 ...

  9. 游戏服务端开发之基础概念扫盲篇

    13年毕业后,做了一年多外包web开发,因为受不了在客户现场工作的氛围,愤然辞职.转行做了一名手游服务端开发. 在广州,据我所知,选择java作为服务端开发语言的公司大概有37互娱,百田,银汉,易娱, ...

最新文章

  1. 持续推进预估时间问题研究,滴滴盖亚计划开放ETA数据集
  2. 《统一沟通-微软-技巧》-20-Lync 2010如何在我的联系人列表中添加非联盟联系人...
  3. char[]数组与char *指针的区别
  4. Linux系统日志切割
  5. oracle11g memory_target,oracle11g MEMORY_MAX_TARGET设置成0 问题处理
  6. C# 控件缩写大全+命名规范+示例
  7. 浅谈 Kubernetes Scheduling-Framework 插件的实现
  8. 工业以太网交换机选机攻略
  9. javascript字典中添加数组_如何在 JavaScript 中更好地使用数组
  10. Hive操作语句实例讲解(帮助你了解 桶 bucket)
  11. 微信接口开发之高级篇系列【网页授权获取用户基本信息】
  12. JAVA常见设计模式面试题
  13. xss php漏洞扫描工具,XSpear:一款强大的XSS漏洞扫描器工具
  14. 【翻译】Flux安全审计已经结束
  15. 翻转单词顺序(python)
  16. VUE(11) : 图片点击全屏展示
  17. Dolphinscheduler/海豚调度器的安装
  18. 下一代IP协议----IPV6
  19. 使用递归方法查询所有分类(一)
  20. tar解压时提示Cannot open: File exists

热门文章

  1. 一文搞懂 HTTP 的长连接和短连接
  2. 写给曾经的自己现在的自己和未来的自己
  3. 网页制作精华代码大全
  4. 孙祥:尊重别人是尊重自己 大牌印象最深是苏克
  5. 介绍一位零基础转行数据分析的好友
  6. WRF-cmaq模式
  7. eclipse官方提供的php插件的使用
  8. 画论77 汤贻汾《画筌析览》
  9. IAR编译出现Error[e46]: Undefined external _NOP referred in main
  10. 解决visio中形状搜索无法使用