Pomelo Gate

网关服务器 gate

  • 一个应用的gate一般不参与RPC调用,也就是说其配置项里可以没有port字段,仅仅有clientPort字段,它的作用是做前端的负载均衡。

  • 客户端往往首先向gate发出请求,网关会给客户端分配具体的connector。具体的分配策略一般是根据客户端的某个key做hash得到connector的ID,这样就可以实现各个connector的负载均衡。

gate知识扩展:

  • gate通俗来讲就时消息达到服务器的第一关,负责与client建立连接,接收client发送过来的消息,并对消息进行验证、分发等。不同服务系统gate负责的功能不太一样,但本质是不变得。
  • gate用于维持用户client连接,将client发的请求转发到具体后端服务器。

gate基础功能:

  • 与client建立连接
    与client建立连接是gate最基本的功能,一个服务作为gate,所有client发送过来的消息都必须先到达这里。client与gate可能是长连接,如socket。也可以是短连接如http。
  • 消息过滤
    client可能给server发送任何消息,合法的非法的都有可能。gate对业务服务进行隔离,消息到gate这里,gate会对消息进行解密解包,对消息的合法性进行统一验证,过滤出非法的请求,减少业务服务不必要处理的请求,减轻业务服务的压力。
  • 消息转发 负载均衡
    gate接收到消息后,根据消息的路由规则将消息分发到不同的业务服务去处理,控制每个也业务处理的流量大小,也可部署多个网关,分散太多client的压力。
  • 业务服务的动态扩容
    gate是业务服务消息的转发中心,当一个服务的消息量过大时,可添加一台新的服务器来处理这些消息。而新的服务只需要注册到网关即可。相反,消息量减少时可动态停止一个服务撤销注册即可。
  • 保证玩家在线 切换服务器无需重新建立连接
    如果游戏服务器框架采用分线等方式的话,在玩家跳转到场景或逻辑服务器时,不需要断开与gate的连接,玩家数量在不同游戏服之间的切换是内网切换,切换工作瞬间完成,玩家几乎察觉不到,这保证了游戏的流畅性和良好的用户体验。
  • 保持心跳
    gate可以定时通过发送心跳包给正在连接的client,保证client与gate的连接,如果某个client掉线了,gate就通知各个服务器去做玩家的下线处理逻辑。这样避免了逻辑服等出现多个相同角色的bug。从一定程度上,减轻了逻辑服务器的压力。

gate功能特性:

  • 对外开放:client需要直到gate的IP和端口才能连接上来
  • 统一入口:架构中可能会存在很多后端服务,若没有统一入口,client需知道每个后端服务的IP和端口。
  • 请求转发:统一入口后,gate必须能将client的请求转发到准确的服务上。
  • 无感更新:client连接的是gate,只要连接不断开,更新后端服务器对client来说是无感知的。

gate特殊功能:

  • Session认证
    gate能维护client是否登录成功的状态,对于未登录的请求不予转发,从而预防恶意攻击。
  • 流量限流
    DDOS攻击client可以通过for循环一直发请求,必须进行限制。
  • 踢下线
    游戏维护时,为了让玩家能更新补丁会将玩家踢下线,重新走一遍登录流程,避免client与server的数据不一致造成显示上的bug。客服也需要对违规玩家进行踢下线处理。
  • 在线统计
    gate拥有所有玩家的连接信息,可轻松统计当前玩家在线。
  • 协议加密
    为了避免client恶意攻击需对请求加密,由于统一了入口,网关做起来比较容易。
  • 心跳检测
    心跳检测用于检测client是否已经掉线,若长时间没有收到心跳请求,则认为client已经掉线,直接请求登录让玩家重新走登录流程。

gate需要与client保证连接,client连接到gate验证之后,需要将连接的channel和用户uid绑定,这样方便用户uid查询它的客户端连接,这样就可以给client返回消息。因为需要管理所有client连接,所以会涉及到多线程的操作。在每个连接验证成功之后,会在当前连接的channel中添加用户uid和channel的映射到一个hashmap中。

典型的gate服务架构

4933701-9d0f916f5c89f99c.png
gate服务架构
  • 后端服务路由表:维护后端当前有哪些服务注册到了网关,以及服务对应哪些区服的配置信息。
  • 区分注册表:维护当前开了哪些区服以及区服信息
  • 终端管理:所有连接上网的设备或进程都被认为是一个终端,终端会有一个编号,这个编号对应后端服务编号或玩家编号。当需要转发消息给后端服务或客户端时,需从终端管理中找到具体的连接进行消息发送。
4933701-9ebf07ecbf7f4672.png
网关交互流程
  • step1.客户端连接网关服务器,然后发送登录请求给网关。
  • step2.网关将登录请求转发给对应区服的后端服务器进行登录验证。
  • step3.后端服务器验证成功后返回登录信息给网关
  • step4.网关会根据登录维持一个Session映射,用于安全验证和重登判断,然后转发登录信息给客户端。
  • step5.客户端收到登录成功消息后,就可以发送业务请求给网关。
  • step6.网关收到业务请求后先会判断玩家是否已经登录锅,登录过的才转发给后端服务器,并且在协议头增加玩家标记。
  • step7.后端服务器收到业务请求后根据协议头的玩家标记,找到玩家的数据进行业务处理,然后返回给网关。
  • step8.网关收到业务回复后直接返回给客户端。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值