实时网络游戏-断线重连

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值