文章目录
1. 服务器处理顶号操作
1.1 我们定义一个管理session的组件
组件中得有一个字典,保存全部的session
这里有个疑问?
为什么我们要保存两个long,accountId和instanceId,为什么不保存对session的引用呢?这样不麻烦吗
1.2 为我们管理session组件添加System
1.3 我们去为创建的Scene添加上我们的组件
1.4 将已经上线的Session进行关闭,然后更新我们组件中的SessionInstanceId
我们可以获取到之前登录账户的SessionInstanceId,然后去Game里面拿到
如果不为空,就代表存在,则将其断开
然后更新我们组件中的SessionInstanceId
这里的Add方法,我们在上面定义是,存在即更新的操作
这个消息呢,我们在这里定义
1.5 十分钟等待,如果玩家还没有进行下一步操作,我们就断开Session,避免客户端一直占用Account服务器
定义一个组件AccountCheckOutTimeComponent,专门用来计时然后断开
我们断开连接的方法,如下
我们此时定义一个新的TimerType
然后我们在组件Awake的时候,开启Timer方法
也就是说,十分钟之后调用我们的DeleSession方法
不过,有的时候我们的Session是直接断开的,所以我们需要清空我们的Timer
1.6 挂载上AccountCheckOutTimeComponent组件
现在我们的session无论任何清空都会在十分钟后自动断开,不会一直占用服务器资源了
2. 运行测试
2.1 Excel表配置Account服务器
添加一行我们自己Account服务器的数据
2.2 服务器修改登录的IP地址
重新生成项目
Unity Build Code
然后运行服务器,运行客户端
2.3 我们故意保留空的字符串,然后点击登录
客户端收到消息
我们发现ErrorCode为200003
原因是客户端发来空的字符串,所以我们服务器认为是错误
然后定义错误码进行返回提示
2.4 正常登录
首先打开数据库
输入账号密码然后点击登录
我们发现服务器给我们返回了Token和AccountId
数据库也存入了账号