ET框架-18 ET框架登录账号请求逻辑编写(3)
文章目录
- 1. 服务器处理消息优化
- 1.1 我们完善我们的账号登录错误ErrorCode
- 1.2 确保在 reply() 完成之后才能进行session.Dispose()
- 1.3 解决用户多次点击登录 多次消息处理的bug
- 1.4 解决两个客户端同时登录并且使用相同的账号和密码
- 1.5 对一些组件使用完及时释放
- 1.6 在客户端避免玩家多次点击按钮
- 1.7 数据字段和逻辑进行分离
1. 服务器处理消息优化
1.1 我们完善我们的账号登录错误ErrorCode
我们需要足够多的ErrorCode来方便我们客户端进行UI提示
因为客户端只有知道错误原因,才好去处理我们的消息
1.2 确保在 reply() 完成之后才能进行session.Dispose()
之前我们是直接调用Action委托的repy()方法,然后Dispose掉我们的Session
但是reply是通过网络发送消息给客户端,如果发送到一半被直接断开,客户端就接受不到消息,一直在等待
这里我们编写帮助类 DisconnectHelper
我们使用拓展方法来开启异步协程安全释放我们的Session
将下面所有的Session用同样的方法进行释放
1.3 解决用户多次点击登录 多次消息处理的bug
我们创建一个Session锁的组件
然后我们在消息进来的时候,判断session是否有SessionLockingComponent组件
然后我们把后面的 异步逻辑块 用using关键字括起来,使用完自动remove释放dispose我们的SessionLockingComponent组件
为什么是异步逻辑块?异步逻辑块是否执行完是不容易判断的,如果按同步的逻辑去处理,那么就会出问题。因为我们必须得让这条消息处理完了,才能进行下一条消息逻辑
前面3中的验证账户密码的正确性是同步逻辑,是直接执行完的
而下面的异步逻辑,是需要时间的
1.4 解决两个客户端同时登录并且使用相同的账号和密码
两条消息都会进入处理阶段,然后在数据库根据账号进行查询,都是为0,然后同时创建account账户,然后同时存入到数据库。
那么,当他们下次登录的时候,同学A可能会去登录到同学B的账户里面,会造成数据错乱
这就是数据库里面最重要的一个概念,就是唯一值,我们必须得保证账户是唯一的,才能避免这些情况的发生
使用协程锁
锁的是异步逻辑
进入这个异步逻辑,就会锁上,直到执行完,才会解锁,让下个逻辑进来
加个协程锁的类型,为我们的Account
同时这个协程锁必须是唯一的,我们得有唯一的id进行标识,那么此时session登录消息的账户名的hash值,就是最好的id
1.5 对一些组件使用完及时释放
比如我们查询数据库的临时实体变量,我们在不使用之后,就得进行判空然后dispose释放掉资源
1.6 在客户端避免玩家多次点击按钮
首先我们进入EUIHelper,在这里我们为按钮添加自己定义的listener
然后我们找到调用我们客户端登录事件的方法
我们把同步的添加Listener的方法,改为我们刚才的拓展方法
这里我们需要的参数是一个Action委托函数,所以我们这里使用lambda表达式,这个()=>{}里面的,就是我们传入进去的函数
然后我们就发现,我们需要的参数是一个需要返回值的异步函数,所以我们得修改我们的登录方法,将它从同步的调用Login,改为异步
这里面我们拿到服务器返回消息的ErrorCode,然后进行下一步处理
1.7 数据字段和逻辑进行分离
进入EUIHelper,在这里我们为按钮添加自己定义的listener的时候,我们定义了一个isClicked的静态字段,但是这个类是在HotfixView层,不允许存在数据字段
我们进行ModelView层,将字段复制到这里
我们把他定义成属性
然后我们得在这个UIEventComponent进行Destory的时候,置为false
然后定义给他赋值的拓展方法
现在我们将使用这个UIEventComponent单例来判断是否点击了UI
ET框架-18 ET框架登录账号请求逻辑编写(3)相关推荐
- ET框架-16 ET框架登录账号请求逻辑编写(1)
文章目录 1. 准备事项 1.1 通过GitClone去拉取ET-EUI项目 1.2 MongoDB正确安装 1.3 Robo 3T 数据库可视化软件 2.数据库相关 2.1 游戏区服 2.2 创建自 ...
- ET框架-17 ET框架登录账号请求逻辑编写(2)
文章目录 1. 客户端保存数据 1.1 创建组件AccountInfoComponent 1.2 创建组件的处理事件AccountInfoComponentSystem 1.3 我们为我们的scene ...
- 篇一、Flask打造 Python Web 开发的灵活框架,实现简易登录。要求有 Python、HTML 和 CSS 基础。
⭐ 简介:大家好,我是zy阿二,我是一名对知识充满渴望的自由职业者. ☘️ 最近我沉溺于Python的学习中.你所看到的是我的学习笔记. ❤️ 如果对你有帮助,请关注.点赞,让我们共同进步.有不足之处 ...
- 【设计思想解读开源框架】java如何发送post请求
在这里分享一份 [mybatis从入门到精通] 的强力教程,定能够助你一臂之力. Mybatis基本介绍 ORM和MyBatis 对象/关系数据库映射(ORM) 基本映射方式 流行的ORM框架简介 目 ...
- Hadoop学习笔记—18.Sqoop框架学习
Hadoop学习笔记-18.Sqoop框架学习 一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据 ...
- php ci post 请求,CI框架中判断post,ajax,get请求的方法
这篇文章主要介绍了关于CI框架中判断post,ajax,get请求的方法 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 CI框架当中并没有提供,类似tp框架中IS_POST,IS_A ...
- ssm框架访问数据库一直在转圈(请求)
ssm框架访问数据库一直在转圈(请求) 今天在写项目的时候遇到了一个问题,和大家分享一下. 先做项目的时候一直放了些假数据.把对象数组传到前台,通过j ...
- 在CI框架下实现验证码登录
登录界面使用验证码是现在网站大多会采用的方式,目的就是为了防止部分用户频繁地登录注册网站,导致网站崩溃.接下来就来说明一下如何在CI框架下实现验证码登录. 实现验证码的思路很简单,首先随机生成几位验证 ...
- RBAC权限框架_MVC权限框架
RBAC权限框架(Role-Based Access Control)基于角色的权限访问控制的框架,通过用户-角色-权限的关联,非常方便的进行权限管理,在这里不再说明什么是RBAC,请自行百度. 谢谢 ...
最新文章
- 计算机基础教案(XP操作系统)
- SaaS系统给企业带来了哪些优势
- boost::hana::ext::std::vector_tag用法的测试程序
- 数据仓库中捕获变化数据(CDC,Changed Data Capture)的四种手法
- Pro*c源程序中使用宿主结构保存查询结果
- java 匿名初始化_Java:双括号初始化 /匿名内部类初始化法
- python做一个linux网卡,Linux系统Python可以选择不同网卡进行网络访问吗?
- python执行原理是什么意思_简述Python程序的执行原理。
- 《SAP后勤模块实施攻略—SAP在生产、采购、销售、物流中的应用》——2.7 可配置制造...
- MTV和MVC的区别
- 解决tkinter卡死问题
- HTML+CSS小米注册登录界面
- 掌握业务流程图符号,提高业绩不再没有头绪
- 华三交换机dhcp 保留地址
- vim 快捷键 总结-编辑文件
- ping 命令的用法大全(图文详解)
- sFTP 上传或下载文件与文件夹
- 写一篇关于乡愁的作文1000字以上
- vue3查看当前路由
- Mapbox + ECharts 实现简单迁徙图