最近玩全民英雄,然后遇到一个bug,导致我一个账号卡死,不得不重玩新号。bug如下:
-------------------------------------------------
问题
-------------------------------------------------
在一个装备合成的引导,我点了合成,接着刚好断网,然后重连网络的时候发现合成的材料消失,可是依然处于合成的引导。这时候显然已经没法合成,而引导又是强制性的,因此没办法往下玩了。
-------------------------------------------------
猜测前端流程:
-------------------------------------------------
一开始,我猜测:可能是请求合成的时候前端自己移除了前端内存中的合成材料。而因为断网了,合成请求没发出,结果导致前端没材料,而引导却还没完成。
这个怎么验证呢?退出程序,重新登录。甚至改成换ipad玩都不行。因此并不只是前端移除了数据那么简单,材料在后端确实已经没了!
那么,我又想到了另一种可能:
他的合成和引导接口是分开的独立接口。怎么说呢?
-------------------------------------------------
猜测前端流程:
-------------------------------------------------
1、前端登录
2、收到当前引导到第几步,是否完成该步骤,是则执行3(不讨论否的情况)
3、发现有引导步骤没完成,则执行引导
4、玩家点击请求执行引导的功能
5、前端收到合成结果
6、前端判断当前是否有相关引导,是则执行7(不讨论否的情况)
7、前端请求后端记录新的引导状态
乍一看好像没啥问题,但实际
你会很容易发现,其实在5、6、7任何一步出错或断网。都会导致扣了材料还没完成引导。
-------------------------------------------------
类似例子
-------------------------------------------------
这个问题其实我把它归类为“带状态的接口调用”,即一个接口的请求需要依赖上一个请求的接口。这种接口的设计很容易出bug,服务端应该记录好每个接口的状态,甚至对一些请求的状态做持久化。举个极端点的例子,不过这个例子比较明显,一般没人这么做!
比如:以普通RPG中合成神器为例,假设合成需要选择2个材料, 然后点击合成。如果这么设计这个接口:
1、当玩家选择第一个材料的时候,请求后端, 后端扣除并记录当前材料
2、当玩家选择第二个材料的时候,请求后端,后端扣除并记录当前材料
3、当玩家点击合成时,后端根据前面记录的两个材料 生成一个新装备给玩家
因为这个错误实在太明显,导致大家不会那么做。而其实这个问题和前面《全名英雄》的处理本质是一样的。只要断网,而后端没做好第1、2步请求的状态持久化,那么材料必定丢失。(如果有记录玩家选过那两个材料,那玩家还能继续点击合成直接第三个接口,而不至于材料被扣除却没合成)
-------------------------------------------------
简陋的解决方案
-------------------------------------------------
回到《全民英雄》那个例子,既然现在玩家是因为先请求和合成,成功合成装备并扣除了材料,然后断网才没请求到记录引导状态。那能不能换个顺序:玩家点击合成之后,先请求记录引导状态再请求合成。这样它如果中间出现断网,顶多就是下次连接的时候引导不见了,但不至于材料被扣除,也不会导致卡死在引导界面(因为更新引导状态已经请求过了,重新连接会获得下一步引导的状态)。这样确实是解决了BUG,但是这样玩家就缺少了一次引导,解决的也不是很彻底。
-------------------------------------------------
完善的解决方案
-------------------------------------------------
我们回想一下,刚刚说的“带状态的接口调用”,即一个接口的请求需要依赖上一个请求的接口。那其实,如果只请求一个独立接口,就不会有这种问题。那请求的应该是合成接口呢,还是引导接口呢?
个人认为,请求合成接口更合适。因为后端本来就有合成接口,只需要后端在合成的时候派发一个事件出去,让引导模块捕获这个事件,然后重置自己的引导状态就可以。这样还省一个接口请求,还节省你流量,多贴心啊!
欢迎大家讨论!
分享到:
相关推荐
bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree
通过本次毕业设计,达到综合运用知识的能力,提高独立分析问题、独立解决问题以及创新的能力。系统采用B/S结构,前台开发环境为MyEclipse8.5,后台数据库为MySql,设计开发Bug管理系统。
接口BUG总集1
软件测试BUG管理系统设计文档,软件测试BUG管理系统设计文档
bug管理及用例设计标准,其中包含bug的优先级别设计,用例的优先级别设计原则
bug,可以让我们看到软件系统的缺陷。除此之外,某公司的开发团队的管理状况,代码的开发水平,管理水平,技术人员的责任心,从bug,我们可以看到一个公司的全部信息。
BUG管理规范BUG管理规范BUG管理规范BUG管理规范BUG管理规范BUG管理规范BUG管理规范
自己做的一个Bug统计图,大家相互参考,相互学习!
bugfree2.0是一款开源的bug管理工具,部署方便,只需下载xampp安装apche和mysql服务即可
bug统计分析图表 bug统计分析图表 bug统计分析图表
Java.Bug模式详解 第1章 混乱环境下的灵活方法 1.1 软件设计、实现和维护的趋势 1.1.1 对于稳定、安全 系统的需求增加 1.1.2 传统软件工程技 术的局限性 1.1.3 开放源代码的软 件项目的可利用性 1.1.4 对于...
bug报告模板经典
禅道Bug提交管理规范 测试流程管理。 本文档定义了bug管理流程及其bug相关信息内容。
这是我们学完C++后,在期末的时候课程设计做的项目,用c++写的一个bug小游戏,当是写的不怎么好,大家有什么好的建议,还望指正(1454067949@qq.com),谢谢
中文版bug系统下载bug反馈系统bug反馈系统bug反馈系统bug反馈系统bug反馈系统bug反馈系统
java java查bug 查bug bug 查错 源码
bug状态流程图+bug处理流程+角色
bugfree 程序代码bug管理。 方便程序开发和测试。
按模块统计按BUG严重级别统计按BUG类型统计UI 界面设计,页面显示问题UE 用户体验、易用性FC 功能问题CK 操作提示信息问题IF 接口问题按BUG回归情