基于消息包可靠协议设计

     由于最近一两年里都是在负责做手游服务器的相关内容,对中国的这种2G/3G网络收费贵,而且带宽小,很想吐槽吐槽。但对于手游来说,这种其实都还可以接受,但是对于手机来说,网络其实是相当不稳定的,比如进出电梯,切换基站,地铁来说,对手机网络影响都很大。对于手机游戏,如果是短连接的话,还好,如果是偏实时性很强,有实时战斗这类的玩法,需要采用长连接了,那么就很影响体验了,就会出现各种断线,丢包,使游戏不能流畅的玩下去。
     于是乎,在思考着如何让手游尽可能的在断线重连之后不丢包,能够比较流畅的玩下去。在这里,我们设计出了一种在tcp之上的一种基于协议包层面的确认机制。一种相对比较复杂一点,就是在客户端和服务器之间,每一个协议,都会有一个确认消息包回应,2端只有收到确认消息包,才能认为当前的消息发送成功,才能从协议队列里移除掉,否则需要缓存。另一只是只有服务器发送的包才需要确认。这种其实已经满足了基本需求,因为,客户端在网络断开的时候,客户端的各种请求是完成不了的,在重连了之后,重新请求一次即可,而服务器需要缓存没有发送成功的消息,在重连成功之后,把没有发送成功的消息重新发送一次。保证数据包不丢失,这样,客户端在重连完之后,并没有数据丢失,还是可以继续往下玩的。采用这种方案,尽可能的保证了数据不丢失,保证游戏的流畅。
     在我们的游戏中,采用的是第二种方案,因为设计上相关简单,同时满足了大部分的需求。当然,在这里只是大致提了些方案,里面其实有很多细节需要注意,也有很多坑,所以需要十分小心,大家有兴趣可以来讨论讨论

猜你喜欢

转载自fsplove520.iteye.com/blog/2232689
今日推荐