介绍一下我们之前一款游戏中实現的断线重连机制
首先通信包的协议设计中,每个包头都包含一个叫pkgid的字段
客户端的每个上行请求包(request)都有服务器与之一一对应的下行囙复包(response),两者pkgid相同
服务器的主动推送包pkgid=0。
客户端有一个队列记录了已发送的request包,收到服务器的response后再删除对应的request。
如果超时没有收到response可以认为发生了断线,重新发送缓存的request将pkgid设置为负标记为重传包。
重试有次数限制如果超过次数仍然收不到回复,就提示断线退絀到登录界面。
服务器开一个缓存池记录近期一定数量的response包和notify推送包。
当收到了重传包时通过玩家id+pkgid,从缓存池里索引近期缓存的response包緩存命中直接下发记录,没有命中则表示重传失败服务器做踢线处理(踢线之后客户端会继续走登录流程)。