从bug看《全民英雄》的接口设计

原创 2013年12月06日 07:57:52
最近玩全民英雄,然后遇到一个bug,导致我一个账号卡死,不得不重玩新号。bug如下:
------------------------------------------------- 
问题 
-------------------------------------------------
 
在一个装备合成的引导,我点了合成,接着刚好断网,然后重连网络的时候发现合成的材料消失,可是依然处于合成的引导。这时候显然已经没法合成,而引导又是强制性的,因此没办法往下玩了。

------------------------------------------------- 
猜测前端流程:
-------------------------------------------------  
一开始,我猜测:可能是请求合成的时候前端自己移除了前端内存中的合成材料。而因为断网了,合成请求没发出,结果导致前端没材料,而引导却还没完成。
这个怎么验证呢?退出程序,重新登录。甚至改成换ipad玩都不行。因此并不只是前端移除了数据那么简单,材料在后端确实已经没了!

那么,我又想到了另一种可能:
他的合成和引导接口是分开的独立接口。怎么说呢?

------------------------------------------------- 
猜测前端流程:
-------------------------------------------------  
1、前端登录
2、收到当前引导到第几步,是否完成该步骤,是则执行3(不讨论否的情况)
3、发现有引导步骤没完成,则执行引导
4、玩家点击请求执行引导的功能
5、前端收到合成结果
6、前端判断当前是否有相关引导,是则执行7(不讨论否的情况)
7、前端请求后端记录新的引导状态

乍一看好像没啥问题,但实际你会很容易发现,其实在5、6、7任何一步出错或断网。都会导致扣了材料还没完成引导。

------------------------------------------------- 
类似例子
-------------------------------------------------  
这个问题其实我把它归类为“带状态的接口调用”,即一个接口的请求需要依赖上一个请求的接口。这种接口的设计很容易出bug,服务端应该记录好每个接口的状态,甚至对一些请求的状态做持久化。举个极端点的例子,不过这个例子比较明显,一般没人这么做!
比如:以普通RPG中合成神器为例,假设合成需要选择2个材料, 然后点击合成。如果这么设计这个接口:
1、当玩家选择第一个材料的时候,请求后端, 后端扣除并记录当前材料
2、当玩家选择第二个材料的时候,请求后端,后端扣除并记录当前材料
3、当玩家点击合成时,后端根据前面记录的两个材料 生成一个新装备给玩家
因为这个错误实在太明显,导致大家不会那么做。而其实这个问题和前面《全名英雄》的处理本质是一样的。只要断网,而后端没做好第1、2步请求的状态持久化,那么材料必定丢失。(如果有记录玩家选过那两个材料,那玩家还能继续点击合成直接第三个接口,而不至于材料被扣除却没合成)

------------------------------------------------- 
简陋的解决方案
-------------------------------------------------  
回到《全民英雄》那个例子,既然现在玩家是因为先请求和合成,成功合成装备并扣除了材料,然后断网才没请求到记录引导状态。那能不能换个顺序:玩家点击合成之后,先请求记录引导状态再请求合成。这样它如果中间出现断网,顶多就是下次连接的时候引导不见了,但不至于材料被扣除,也不会导致卡死在引导界面(因为更新引导状态已经请求过了,重新连接会获得下一步引导的状态)。这样确实是解决了BUG,但是这样玩家就缺少了一次引导,解决的也不是很彻底。

------------------------------------------------- 
完善的解决方案
-------------------------------------------------  
我们回想一下,刚刚说的 “带状态的接口调用”,即一个接口的请求需要依赖上一个请求的接口。那其实,如果只请求一个独立接口,就不会有这种问题。那请求的应该是合成接口呢,还是引导接口呢?
个人认为,请求合成接口更合适。因为后端本来就有合成接口,只需要后端在合成的时候派发一个事件出去,让引导模块捕获这个事件,然后重置自己的引导状态就可以。这样还省一个接口请求,还节省你流量,多贴心啊! 

欢迎大家讨论! 
版权声明:本文为博主原创文章,未经博主允许不得转载。

Bug heroes虫虫英雄······超详细翻译+基本攻略

转载自:http://apple.zone.it.sohu.com/forums/thread-4588491-1-1.html 游戏真的很不错!感谢威锋[url=u-htm-action-show...
  • yang3wei
  • yang3wei
  • 2012年05月17日 11:26
  • 3793

从萧峰看英雄

   萧峰是公认的大英雄,但是他到底做了什么呢,我们来分析一下。 一 聚贤庄上,萧峰大开杀戒。“乔峰杀人之后,更是出手如狂,单刀飞舞,右手忽拳忽掌,左手钢刀横砍直劈,威势直不可当,但见白墙上点点滴滴的...
  • pyp
  • pyp
  • 2004年08月12日 22:34
  • 930

全民营销的新玩法

近日,广州地产界举办了一场由30名地产营销总参加的内部沙龙,主题是探讨移动互联时代下快速拓客的新玩法。营销总们对各类传统营销手段做了探讨,发现其痛处或者困境都是自家常态。他们对全民营销这个途径一致看重...
  • gpfwcx
  • gpfwcx
  • 2015年11月17日 21:23
  • 1073

全名k歌导出已发布的音乐方法

1.      登录网页版的全民k歌,进入自己的个人主页 2.      选择一个自己的作品,比如下面的“依然爱你”    3.点击作品,我们可以看到已经播放音乐了。 4.此刻按下F1...
  • liu16659
  • liu16659
  • 2016年12月08日 22:07
  • 3082

全民营销,只看这篇文章就够了

题记:穿上了互联网马甲,全民营销似乎无往而不利。于是,骇客现身,奇招迭出。这是弱市下的病急乱投医,还是营销模式的脱胎换骨?   上篇:骇客们   骂战   卖房不易...
  • gpfwcx
  • gpfwcx
  • 2015年11月17日 21:14
  • 3031

[接口设计]从客户端的角度设计后端的接口

前言 兵马未动,粮草先行。在一款APP产品的各个版本迭代中,兵马的启动指的是真正开始敲代码的时候,粮草先行则是指前期的需求,交互,UI等评审准备阶段,还有本文要说的接口的设计与评审。虽然很多时候一个a...
  • BaiHuaXiu123
  • BaiHuaXiu123
  • 2017年01月04日 08:05
  • 4251

固定工、合同工、全民合同制工人之…

1980年开始在中外合资经营企业中实行劳动合同制。 1982年2月,劳动人事部发出了《积极推行劳动合同制的通知》,在全国试行劳动合同制。 1986年,国务院发布了一系列的实行劳动合同制的暂行规定,在国...
  • sjpljr
  • sjpljr
  • 2017年04月14日 10:09
  • 962

英雄的旅程-三段式

通常三幕的叙事结构都会存在两个情节点,这两个情节点是改变人物命运或剧情走向的关键点,而这两个关键点又将整个故事分为三幕:...
  • u011639126
  • u011639126
  • 2017年12月07日 23:25
  • 133

《全民挂机》 源码解析 一

源码来自9miao 本人技术有限,大家共同学习,抛砖引玉 2.140.0版本的全民挂机 概述:   基本目录结构: Code_Client  (客户端 具体游戏相关c++代码,还有一部分lua在Res...
  • zzh442856860
  • zzh442856860
  • 2016年04月04日 00:33
  • 2344

Java学习:英雄对决总结—英雄选择

《英雄对决》这个游戏是课堂示例的一个扩展版本,因为写这个游戏的时候刚学到对象、继承等,所以这个游戏其实是一个文字游戏。编程方面现在学的不多,但是没有想到的是我居然可以把我想要的效果都可以做出来。   ...
  • ziwuyouyu
  • ziwuyouyu
  • 2016年10月04日 15:57
  • 574
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从bug看《全民英雄》的接口设计
举报原因:
原因补充:

(最多只允许输入30个字)