文章目录

  • 1. 服务器处理顶号操作
  • 1.1 我们定义一个管理session的组件
  • 1.2 为我们管理session组件添加System
  • 1.3 我们去为创建的Scene添加上我们的组件
  • 1.4 将已经上线的Session进行关闭,然后更新我们组件中的SessionInstanceId
  • 1.5 十分钟等待,如果玩家还没有进行下一步操作,我们就断开Session,避免客户端一直占用Account服务器
  • 1.6 挂载上AccountCheckOutTimeComponent组件
  • 2. 运行测试
  • 2.1 Excel表配置Account服务器
  • 2.2 服务器修改登录的IP地址
  • 2.3 我们故意保留空的字符串,然后点击登录
  • 2.4 正常登录


1. 服务器处理顶号操作

1.1 我们定义一个管理session的组件

什么是etl架构 etl框架设计_服务器


组件中得有一个字典,保存全部的session

这里有个疑问?

为什么我们要保存两个long,accountId和instanceId,为什么不保存对session的引用呢?这样不麻烦吗

什么是etl架构 etl框架设计_什么是etl架构_02

1.2 为我们管理session组件添加System

什么是etl架构 etl框架设计_什么是etl架构_03


什么是etl架构 etl框架设计_unity_04

1.3 我们去为创建的Scene添加上我们的组件

什么是etl架构 etl框架设计_服务器_05


什么是etl架构 etl框架设计_客户端_06

1.4 将已经上线的Session进行关闭,然后更新我们组件中的SessionInstanceId

我们可以获取到之前登录账户的SessionInstanceId,然后去Game里面拿到

如果不为空,就代表存在,则将其断开

然后更新我们组件中的SessionInstanceId

这里的Add方法,我们在上面定义是,存在即更新的操作

什么是etl架构 etl框架设计_ET_07


这个消息呢,我们在这里定义

什么是etl架构 etl框架设计_什么是etl架构_08

什么是etl架构 etl框架设计_ET_09

1.5 十分钟等待,如果玩家还没有进行下一步操作,我们就断开Session,避免客户端一直占用Account服务器

定义一个组件AccountCheckOutTimeComponent,专门用来计时然后断开

什么是etl架构 etl框架设计_客户端_10


什么是etl架构 etl框架设计_服务器_11


我们断开连接的方法,如下

什么是etl架构 etl框架设计_unity_12


我们此时定义一个新的TimerType

什么是etl架构 etl框架设计_服务器_13


然后我们在组件Awake的时候,开启Timer方法

也就是说,十分钟之后调用我们的DeleSession方法

什么是etl架构 etl框架设计_unity_14


不过,有的时候我们的Session是直接断开的,所以我们需要清空我们的Timer

什么是etl架构 etl框架设计_服务器_15

1.6 挂载上AccountCheckOutTimeComponent组件

什么是etl架构 etl框架设计_服务器_16


现在我们的session无论任何清空都会在十分钟后自动断开,不会一直占用服务器资源了

2. 运行测试

2.1 Excel表配置Account服务器

什么是etl架构 etl框架设计_什么是etl架构_17


添加一行我们自己Account服务器的数据

什么是etl架构 etl框架设计_服务器_18

2.2 服务器修改登录的IP地址

什么是etl架构 etl框架设计_客户端_19


重新生成项目

什么是etl架构 etl框架设计_服务器_20


Unity Build Code

什么是etl架构 etl框架设计_客户端_21


然后运行服务器,运行客户端

什么是etl架构 etl框架设计_unity_22

2.3 我们故意保留空的字符串,然后点击登录

什么是etl架构 etl框架设计_客户端_23


什么是etl架构 etl框架设计_什么是etl架构_24


客户端收到消息

我们发现ErrorCode为200003

什么是etl架构 etl框架设计_unity_25


原因是客户端发来空的字符串,所以我们服务器认为是错误

然后定义错误码进行返回提示

什么是etl架构 etl框架设计_ET_26

2.4 正常登录

首先打开数据库

什么是etl架构 etl框架设计_unity_27


输入账号密码然后点击登录

我们发现服务器给我们返回了Token和AccountId

什么是etl架构 etl框架设计_unity_28


数据库也存入了账号

什么是etl架构 etl框架设计_服务器_29