pvp跨服匹配赛

  1. 线程问题
    匹配线程
    网络连接的建立、注册、断开
    游戏服请求匹配
    匹配成功创建副本
    副本创建成功通知游戏服

匹配服 MatchServer

  1. 如何处理逻辑服、战斗服断开的逻辑
  2. 如何处理匹配过程中各种原因的匹配失败?
  3. 线程问题

战斗服 PVPServer

  1. 连接匹配服
  2. 其他逻辑和地图服一样,增加额外的创建副本逻辑
  3. 游戏服和战斗的连接时效性什么时候断开?
  4. 负载情况上报匹配服逻辑需要完善
  5. 匹配服如果断开了,应该怎么办?
  6. 线程目前没有问题,因为只有一个创建副本的请求,和匹配服的连接管理放一个线程就OK.

游戏服 GameServer

  1. ID调整保证玩家id全服唯一
  2. 服务器的唯一标志调整,采用pid+sid保证全平台的服务器hostID唯一
  3. 远程地图客户端支持多地图,增加远程服务器类型,保证刷新,开关闭都能针对指定类型的远程地图
  4. 匹配服断开应该怎么办?

服务器之间的心跳

基础逻辑已经完成,心跳失效处理需要完善细节

待处理问题

  1. 如果匹配过程中,匹配服和游戏服断开连接如何处理?
    1. 匹配过程中断线取消所有正在匹配的队伍
  2. 如果匹配成功,创建战场,匹配服和战斗服断开连接如何处理?
    1. 如果匹配成功找不到战斗服会提示占不到战斗服然后取消这次匹配
    2. 如果创建成功后,没有反馈到中心服,那么中心服也就不能通知游戏服,此时游戏服会有个超时设置,超过时间取消这次匹配,然后重新匹配
  3. 如果比赛过程中,游戏服和战斗服断开连接如何处理?
    1. 游戏服和战斗服断开逻辑,走通用的地图逻辑,就是玩家踢回默认地图
    2. 踢回地图后删除本次匹配信息,清除当前比赛的信息
  4. 玩家下线,再次上线还能进入战场吗?
    1. 数据保留,根据策划需要不需要
  5. 打完比赛匹配组队何时清理?
    1. 通过notice
  6. 战斗服的连接和断开
    1. 需要就连接
    2. 什么时候断开?
  7. 中心服的连接?什么时候连接
    1. 暂时一直连接(配置了就连接)
  8. 如果游戏服处理掉了匹配,那么,中心服怎么知道呢?中心服继续匹配?那么会提示重复?
    1. 未解决
    2. 如果一切以游戏服请求为主,新的来了,老的覆盖?如何?
    3. 游戏服毕竟是通过验证的不可能让玩家随便请求
    4. 如果匹配重复了,通知游戏服,其实游戏服发现groupid对不上,是不需要处理的?
    5. 游戏服一定保证一个玩家只有一个groupid,这样一旦对不上,这次匹配就拉到
    6. 唯一问题,就是副本会创建多余的,这里就是内存的问题,其实这个问题可以理解,因为毕竟这种重复的情况是少数的
  9. 游戏服线程问题?
    1. 未解决
    2. 战斗服地图同步问题,应该处理成只同步自己的副本和地图 已搞定
  10. 开启时间问题
    1. 活动开启时间
    2. 副本连接

健壮性保证

  1. 匹配服
    1. 匹配服和游戏服、战斗服都有心跳,检测连接的健壮性
    2. 心跳超时,匹配服主动关闭连接,等待对端重连
    3. 当游戏服请求匹配发现重复的时候,此时需要用新的匹配住去替换老的匹配组,保证一个玩家不会同事存在多个匹配
    4. 对于游戏服和战斗服,做重复注册的逻辑,重复注册会产生玩家顶号一样的逻辑
    5. 当玩家已经匹配成功,此时游戏服再次重复匹配,此时返回的匹配成功信息中的group.id将会和新的不一致,
      将放弃本次匹配结果,保证和游戏服的一致性。
  1. 游戏服
    1. 游戏服和匹配服持有心跳
    2. 游戏服有检查心跳的定时器 HeartChecker
      1. 心跳超时,那么会断开所有连接,等待重连机制重连
      2. 取消所有正在匹配的队伍(正在比赛的不用管)
      3. 取消匹配之后清楚玩家各种状态,保证重连以后,玩家可以很快进行新的匹配
    3. 游戏服和战斗服利用原有远程地图机制保证玩家的稳定性
    4. 当战斗服发生错误(断开连接、关服等)玩家被踢回默认地图时,如果发现该地图是战斗地图,
      那么会情况玩家匹配数据,保证玩家不会状态错误,导致不能进行新的匹配
    5. 战斗服在活动期间不进行连接清理,连接上,就让保持连接,知道活动结束,在进行断开,这样不会出现中间状态
      保证此期间稳定性,如果需要考虑性能,可以后期进行处理,逻辑会相对复杂一些
    6. 匹配服的连接,暂时采用一旦配置了,就一直保持连接,减少中间切换的复杂性,和战斗服连接一样
    7. 游戏服定时器 PlayerMatchCheckTask 检查玩家匹配的各种状态
      1. 匹配请求状态超过10000S没返回,那么将会放弃本次请求
      2. 正在匹配中状态超过5分钟没有匹配成功,那么也将会放弃本次匹配
      3. 战斗中状态超过60分钟没有结果,那么也将放弃本次战斗
      4. 以上所有状态放弃之后,都降清理玩家数据,保证玩家可以进行下一次匹配请求
  1. 战斗服
    1. 战斗服和匹配服保持心跳
    2. 战斗服作为游戏服的远程地图,有原远程地图的可靠性保障
    3. 如果玩家匹配之后,由于游戏服各种原因导致游戏服放弃了本次匹配,但是此次匹配已经产生了副本,由于此时的group.id
      和玩家的id不一致,玩家将会放弃此次副本,保证玩家只会进一个地图。
    4. 第三条的情况下,将会有玩家占便宜,因为对放没进来,这也算是运气好吧。
    5. 战斗服会主动上报负载到匹配服,游戏服会进行一些计算达到简单的负载均衡