zoukankan      html  css  js  c++  java
  • 游戏服务器框架之网关

     当用户在大厅登陆成功之后,大厅会分配一个网关的地址给客户端。客户端与这个网关建立长连接,负责与服务器的通信。网关的主要功能有:

    • 消息解析
    • 与客户端保持连接
    • 消息合法性验证
    • 转发消息到业务服务
    • 流量限制
    • 版本验证等。
    • 可扩展性
    • 请求信息转发

    一般的功能都可以随便添加。这里主要说一下消息转发。对于客户端和业务服务来说,网关是一个承上启下的作用。首先客户端与网关建立连接,第二,网关收到客户端的一请求请,得知道把这条请求发送到哪个业务服务上面,第三,业务服务处理完一个请求,如何把消息返回给网关,网关再如何把消息发给客户端。

    一,客户端与网关建立连接

      网关作为一个单独的对外服务,而且是长连接,一般使用Netty作为服务的网络通信框架。它的异步高性能是公认的,这没什么可说的。在游戏服务器的网关中,建立连接一般分为两个步骤:

      1,客户端通过socket连接到服务器

      2,连接的认证,防止无用的连接过多

      连接到服务器之后,客户端和服务器就会建立起一个socket通信通道,但是一个服务器的socket连接数量是有限的,如果客户端与服务器大量建立socket连接,而不通信,就会造成大量的socket资源被占用,增加服务器的压力,影响正常用户的使用,所以要有连接的认证,当连接建立成功之后,要在一段时间之内进行认证,如何认证呢?就是让用户请求token验证,如果一段时间内没有认证,则服务器主动断开连接。这样也可以保证之后用户的通信是有效的,不用每次都验证token.用户验证成功之后,保证用户id与连接的映射,方便根据用户id给此用户的客户端返回消息。

    二,网关与业务服务间的通信

      一个网关后面可能有n个业务服务,所以是一个一对多的关系。所以增加一个业务服务都需要与网关建立一条连接。如果直接建立连接,管理起来比较麻烦。既然是一对多的关系,我们自然想到一种模式:发布-订阅。这种模式可以解耦发布者和订阅者。而目前很多消息队列框架都支持这种模式。比如rabbitmq,rocketmq,kafka等。推荐使用rocketmq。这里阿里的消息中间件。

      

      要实现网关和业务服务的数据交互,大消息传输中需要几个公共参数:

        fromServerId     消息的发送服务器id,即消息的来源服务id

        toServerId    消息要到害的服务Id

      在网关与业务服务交互的消息中必须带有这两个参数

      1,网关收到的消息如何转发到业务服务器

        既然是使用发布-订阅模式,那网关就是发布者,业务服务就是订阅者,即消息消费者。在网关处,首先是根据用户id选择用户到过的业务服务id,可以根据用户id和业务服务数量求余,这样同一个用户id都会被分配到同一台业务服务器上面。为了可以保证动态添加新的服务,每次给用户分配好到达的业务服务id之后,可以缓存起来,有缓存的话就使用缓存中的,这样动态添加一台新的业务服务之后,已分配的用户不用重新分配,当网关重启之后清空缓存,再重新分配。获得的业务服务id即toServerId,网关收到消息之后,发送消息的topic可以使用toServerId组合,例如:“GameGate” + toServerId ,这样同一个业务服务的消息都会发送到同一个消息主题里面。而在业务服务端,则需要监听网关的消息,监听topic就是“GameGate” + 本业务服务的id,这样就可以收到网关发送过来的消息了。

      2,业务服务如何返回消息给网关

        同样的道理,业务服务要发消息给网关,那么业务服务就是发送者,发送的消息topic可以是“GameServer” + 网关服务的id,即从接收消息中获取的fromServerId。而网关那边则需要监听topic:"GameServer" + 本网关的服务Id.

     

      这样就完成了网关和业务服务之间的消息交互。网关的其它职能可以根据需要增加。


     

       

    QQ群交流:66728073,更多文章:http://www.coc88.com;公众号:

      

  • 相关阅读:
    SharePoint 2013 APP 开发示例 (六)服务端跨域访问 Web Service (REST API)
    麦咖啡导致电脑不能上网
    SharePoint 2013 Central Admin 不能打开
    SharePoint 2013 APP 开发示例 (五)跨域访问 Web Service (REST API)
    SharePoint 2013 APP 开发示例 系列
    synthesize(合成) keyword in IOS
    Git Cmd
    简单的正则匹配
    Dropbox
    SQL Server Replication
  • 原文地址:https://www.cnblogs.com/wgslucky/p/9093149.html
Copyright © 2011-2022 走看看