游戏断线重连方案探讨

  在开发手游网络版本时,无一例外会遇到当网络异常断开后重连的问题。我们在开发第一款手游时,对待这个问题的处理态度是:不管!!谁叫你的手机网络这么烂~~谁叫你的RP和长相这么不给力~~想法是好的,现实却是很残酷的。我们自己在测试过程中就经常遇到断线的问题,特别是用2G网络的时候,搞得眼里冒火。况且这对用户来说也太粗暴了吧。用户直接会说:尼玛,这是什么烂游戏,直接扔垃圾桶!!

 

  经过一轮头脑风暴后,我们使用双向心跳检测机制,当N次收不到心跳包后就启动断线重连或游戏托管,Server会把最新的游戏状态回发给Client。这样做会有2个不是问题的问题:1、当游戏状态很多时处理起来会比较麻烦;2、旧的界面会直接一闪到新界面,用户看不到中间变化的过程。既然不是问题的问题那就没有问题(玩一下绕口令,哈哈),先这么干了,反正也可以解决问题。coding...

 

  此方案实现了且游戏也上线了,但总感觉不那么完美(程序猿就是不缺乏精益求精的精神,赞一个,哈哈)。又经过新一轮头脑风暴,有了个新想法:给TCP数据包编号!这样断线后只需要把没有的那些包回发给客户端就好了。如:客户端TCP现在的编号是3,断线了,服务端编号增加到7,重连上来后,回发4、5、6、7这4个包就可以了,不需要回发所有的游戏状态了。貌似一切看起来都是那么完美,但实际测试结果总是很残忍,在高并发的情况下,因为Server缓存了大量的TCP数据包而造成性能瓶颈,此可怜的方案直接被PASS,欢迎各位大虾发表高见~~

 

 

posted @ 2013-11-29 17:30  hongmao  阅读(2116)  评论(0编辑  收藏  举报