最近项目组在开发一款运行在微信小游戏环境的斗地主游戏,项目的第一个版本收尾阶段突然出现了一个奇怪的bug,因为之前开发阶段的测试都是在浏览器以及微信开发工具上的模拟器进行的测试,所以直到临近项目上线才发现这个问题,具体表现如下:游戏运行在手机上会特别卡,并且卡一段时间、或者卡一下就断线,即使断线恢复后也依然很不稳定。

初步猜想:卡顿问题属于客户端程序问题,断线情况可以排除心跳包问题,可能是客户端发送消息包存在格式问题,或者服务器一些异常导致。

首先通过调试信息来看,客户端并没有主动请求断开与服务器的连接,追踪服务器的日志信息来看,在客户端与服务器断开连接前,都是因为数据传输协议解析错误问题,导致服务器主动断开连接的,然后就又通过调试信息查看断开连接前客户端发送给客户端的消息包是否有格式问题,结果出乎意料没有。

这就奇怪了,没办法,项目周期将至,不得不做些取舍,暂时实在没有头绪只好打算在服务器解析到消息包错误时忽略该消息,不做主动断开连接,本以为这样就可以暂时了事,怎料游戏运行在手机环境下的问题依然存在。

从断线这条路线找下去没有头绪,只好换成从卡顿问题下手,用排除法把可能的逻辑代码注释调试,最后定位出了是因为代码中有些地方的console.log(...)日志记录非常耗时,有些地方光是因为加了这行代码就使逻辑执行时间慢了3秒,好了,问题找出来了就好办,最后采取的措施是:开发测试时因为是用浏览器以及微信开发工具模拟器调试,加上在模拟器上又不存在这种现象(其实是设备配置问题),所以程序员自己测试不加任何优化,如果是要上传微信体验包,就把console.log方法重写为一个空方法,这样,项目里每一句调用console.log()方法的地方实际不能使用正常的日志记录功能,仅仅是调用的一个空方法,这样改善之后,游戏跑在手机上就不存在这种问题了。

Logo

这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!

更多推荐