记一个一年了才解决得了5个麻将的经典bug

9 篇文章 2 订阅
6 篇文章 0 订阅

       去年血战麻将久不久会出现了碰掉一个牌,但碰掉那张牌没有移除成功。导致牌面会出现5个牌的bug,但是个bug呢你去配一样的牌,一样的步骤,动作,顺序都不能复现。经过大量分析,服务端是确定没有异常的,但客户端这个是怎么出现的,一时没有好办法就用了个最笨的办法,每次牌堆变更就下发一次牌堆牌下去更新,但是会导致服务端,前端的代码非常臃肿。这作为一个程序员来说实在是不能容忍的,优雅是程序员的最高境界,因为是前端发生的bug,我做服务端的,虽然也做过前端,一时也不太能理解前端的代码为什么出现了问题。

       直到今天,另外一个二人麻将也出现了碰牌没有在牌堆里移除掉导致出现5个北风的bug,这些都是致命的,这次经过开会商讨,一定要重现这个bug,从根源上去解决他,那怕重构。绝不对用一些笨拙的手段去掩盖它。最终经过几个小时的测试分析,原来这个bug是这么来的,出牌动作,是先发一个出牌命令给服务端,接收到出牌成功的命令才播放出牌动画。然后这张牌机器人要碰他会发一个碰牌消息过来,然后把那张出去的牌进去删除。正常通信下没有问题,但是这里面忽略了一点,就是网络波动,出牌成功的消息到来时,同时碰牌消息也到来了,但出牌动画是会和碰牌消息同时执行的,播放动画是需要时间的,此时碰牌消息想要移除牌堆里面的牌,结果没有,就失败了,这样5个麻将的bug就出来了。下个动作需要上一个动作的结果,然后又没有顺序执行,解决方案是出牌结果不放在出牌动画里面回调执行,而是在出牌动画之前就已经执行了,这样动画做动画的事,碰牌消息来了,依然可以正确处理。其实很多做前端的人都没有从这个层次去思考过这个问题,是非常难以复现的,解决这个bug要对网络通信有一定的理解才可以想得到的。我是通过改变发送消息时间代码去重现的,前端同事也被这个bug头痛了一年了,心病已除,睡觉就香了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值