一、功能介绍
玩家在游戏期间需要进行通信的服务器有:登录服、广场服、游戏服(不考虑网站)。玩家和服务器之间通信是通过网关服转发。连接的方式是网关服主动和登录服、广场服、游戏服进行连接,登录服、广场服、游戏服是用网关服代理模块负责接收网关服连接,并进行数据接收和发送。
二、类图
2.1 调用网关代理客户端对象
- 创建网络监听,用于监听网关服连接
- 调用网关服代理的对象需要继承IServerProxySink,OnClientAccpet()用于创建客户端连接对象并返回对象指针。
- 负责客户端连接对象创建和消耗
2.2 GatewayProxyServer
- 接收网关服连接和校验(网关服连接成功之后会发一个校验码)
- 校验成功之后创建GatewayServerCenter对象用于负责连接成功的网关服消息
- 网关服可以有多个一个网关服对应一个GatewayServerCenter对象
2.3 GatewayServerCenter
- 负责与某一个网关服消息交互
- 当玩家第一次发送消息给服务器(登录服、广场服、游戏服)需要先发送登录消息
- 收到玩家发送的登录消息,创建ServerConnectionProxy对象并调用OnClientAccpet()获取客户端连接对象,将对象指针赋值给ServerConnectionProxy::m_pHandler。
2.4 ServerConnectionProxy
- 对应一个客户端连接对象,记录客户端连接对象的IP、端口等信息
- 负责客户端连接对象消息发送
- 玩家发送消息统计和输出(用于测试)
2.5 客户端连接对象
- 由调用网关代理客户端对象中的ServerConnectionProxy()创建。
- 负责不同服务器消息逻辑处理
三、使用方法
3.1 需要调用的服务器
是有和玩家进行通信的服务器才需要网关代理分别为:登录服、广场服、游戏服
3.2 各服务器调用流程
从下图服务器框架图中可以看出,网关服连接的服务器有:登录服、广场服、游戏服、中心服。中心服没有和玩家进行通信,不需要网关服代理。游戏服和登陆服只接受网关服连接只有一个监听端口,它们的调用网关代理客户端对象就是主服务器对象(LoginServerCenter 和 CGlobalServer)。广场服监听端口有两个一个监听网关服连接另一个是监听游戏服连接,广场服调用网关服客户端代理对象是CUserClientServer。
3.3 登录服网关代理简化类图
3.4 游戏服网关代理简化类图
3.5 广场服网关代理简化类图
3.6 接口定义