关于游戏协议的思考(四)——客户端在发送协议前,是否有必要进行有效性校验

  在游戏开发过程中,客户端,服务端会对协议的有效性进行校验,比如商城购买商品协议,客户端在发送协议之前,会判断玩家是否拥有足够的金钱购买该商品,如果不足会提示玩家金钱不足,如果满足才把协议推送给服务端,由于有模拟客户端发送协议给服务端的情况,服务端是不能信任客户端发送的任何内容,所以服务端在收到客户端购买协议之后也对协议进行校验。

  问题来了,服务端进行协议校验是必不可少,那么客户端能否不做这一步协议校验?

  客户端不做校验的好处是什么?
  最关键的一点是可以减少客户端的工作量,就单单购买商品这种协议,客户端需要校验的情况就可以不少,除了校验金钱是否足够,还会校验购买数量是否超过每日上限,可能会有完成某个任务才能购买该商品的情况,这时客户端还要校验某个任务是否完成。
  第二点是源于我之前做服务端开发时,对客户端协议校验带来不方便的体会。还是举商城购买商品的例子,玩家身上有5块钱,服务端修改服务端的配置数据,把商品价格从10块改为5块,想测试购买协议,结果由于客户端做了协议校验,不得不把客户端的配置数据也进行更新,才能进行测试,服务端的测试还要依赖于客户端的更新,这就不爽啦。
  当然,随着接触项目的增多,第二点有比较多的解决办法,比如模拟客户端发协议,绕开客户端的判断,比如把更新服务端、客户端的配置数据的功能开放出来,供项目所有人使用。
  对于这个问题,我也与不少人交流过,大部分人觉得有必要,对话如下:
  A说:这个协议有没有必要发送给服务端,没必要!没必要那就不发。
  我说:不是没必要就不发,这已经涉及到两个维度,一个是必要性,一个是工作量,如果为了一个客户端协议校验要花上一天的工作量,你是否还坚持没必要就不发!?
  B说:客户端省的这点工作量没什么,为什么老是想偷懒。
  我说:不偷懒又怎么称为程序员,可能单看一个协议校验的工作量微不足道,但是一大堆协议累积起来的工作量就是可观的,如果客户端付出了这么多工作量却没有对应的好处,那为何不把它们省下来?
  C说:客户端进行协议校验可以把服务端协议校验中有漏洞的问题给堵上。
  我说:如果客户端进行协议校验,这样测试人员就难以发现服务端协议校验的漏洞,这不就相当于把问题掩盖起来?
  C再说:合格的测试人员是要模拟发包测试,而且就算测试人员测漏了,会模拟发包的玩家也是极少数,不会造成大的影响,要是客户端什么都不限制,连普通玩家也可以利用服务端协议校验中的漏洞,就会造成非常大的问题,项目以前就遇到过这种情况,那时就觉得客户端应该在协议发送前进行校验。这么说吧,如果服务端协议校验有漏洞,一定是测试和服务端的问题,但是如果客户端有协议校验,堵住了这个漏洞,那算是帮了测试与服务端的忙,他们会感谢你。另外,客户端主要做一些比较简单,工作量较小的协议校验,太复杂的可以交给服务端。
我说:既然是项目组以前血与泪的教训,那就没必要再去重走后路了,再者,并非所有客户端能判断的校验都要客户端来处理,而是选择其中比较合理的进行校验

结论:客户端在发送协议给服务端之前,最好进行一些合理的协议有效性校验。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值