2016-7-8 杂感

来源:互联网 发布:安装淘宝网2017安卓 编辑:程序博客网 时间:2024/05/16 07:50

今天首先谈一个游戏开发中经常遇到的问题,就是客户端的断线重连,之前和客户端同学配合开发了这个功能,但是今天测试的时候发现,当人为的断开wifi后,再重新连接,游戏结束了,这个异常是和开发框架有关,后面把这个问题解决了,但是同样又带来了一个新的问题,就是多点登录问题,这个后面再聊。


1、断线的检测

断线的检测应该由客户端来做,并且做一个UI的展示,告诉用户,网络状况不好或者连接已断开,Andriod或者iOS上应该有接口可以获得网络的状态信息。当然,这个步骤也可以由服务器来做,但是需要注意的是,服务器通过心跳检测到断线,这时能做的也就是记录下信息,因为已经断线,不能给客户端发送通知,所以客户端还是得通过自己来检测网络,然后做一个展示。


2、上下文信息

上下文信息尽量精简,但是要保证客户端在走断线重连逻辑后能完整的回复游戏场景,以我们现在做的为例,就需要保存完整的地图信息,包括道具等等。客户端在断线后,自动发送断线重连请求,服务器下发保存的游戏场景。这里有一个问题就是数据不同步的问题,因为在客户端加载的过程中,有可能存在一个微小的时间间隙,其他玩家进行了操作,但是当前玩家的信息中没有同步。解决办法就是增量同步,现在是同步两次,后面如果可以,需要同步更多,但是问题就是同步的开销过大,这个后面可以优化。


3、多点登录

这个不是断线重连需要解决的问题,但是今天遇到了,在服务器多点部署,多客户端同时登录时,怎么解决,现有的办法就是建立一个全局在线表,每一次登录上来的玩家查询是否在在线表中,如果有,那么踢掉。之所以会出现这个问题,是我对现有框架还不是很熟悉,还需要学习。


很多知识都是想通的,Redis的AOF和RDB怎么说呢,和MySQL的Redo Log和Undo Log有着基本想通的思想,内存数据库也在尝试着通过可持久化的技术来尽可能的保证数据的可靠性,哈哈~


0 0
原创粉丝点击