文章目录

  • 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)相关推荐

  1. ET框架-16 ET框架登录账号请求逻辑编写(1)

    文章目录 1. 准备事项 1.1 通过GitClone去拉取ET-EUI项目 1.2 MongoDB正确安装 1.3 Robo 3T 数据库可视化软件 2.数据库相关 2.1 游戏区服 2.2 创建自 ...

  2. ET框架-17 ET框架登录账号请求逻辑编写(2)

    文章目录 1. 客户端保存数据 1.1 创建组件AccountInfoComponent 1.2 创建组件的处理事件AccountInfoComponentSystem 1.3 我们为我们的scene ...

  3. 篇一、Flask打造 Python Web 开发的灵活框架,实现简易登录。要求有 Python、HTML 和 CSS 基础。

    ⭐ 简介:大家好,我是zy阿二,我是一名对知识充满渴望的自由职业者. ☘️ 最近我沉溺于Python的学习中.你所看到的是我的学习笔记. ❤️ 如果对你有帮助,请关注.点赞,让我们共同进步.有不足之处 ...

  4. 【设计思想解读开源框架】java如何发送post请求

    在这里分享一份 [mybatis从入门到精通] 的强力教程,定能够助你一臂之力. Mybatis基本介绍 ORM和MyBatis 对象/关系数据库映射(ORM) 基本映射方式 流行的ORM框架简介 目 ...

  5. Hadoop学习笔记—18.Sqoop框架学习

    Hadoop学习笔记-18.Sqoop框架学习 一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据 ...

  6. php ci post 请求,CI框架中判断post,ajax,get请求的方法

    这篇文章主要介绍了关于CI框架中判断post,ajax,get请求的方法 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 CI框架当中并没有提供,类似tp框架中IS_POST,IS_A ...

  7. ssm框架访问数据库一直在转圈(请求)

                             ssm框架访问数据库一直在转圈(请求) 今天在写项目的时候遇到了一个问题,和大家分享一下. 先做项目的时候一直放了些假数据.把对象数组传到前台,通过j ...

  8. 在CI框架下实现验证码登录

    登录界面使用验证码是现在网站大多会采用的方式,目的就是为了防止部分用户频繁地登录注册网站,导致网站崩溃.接下来就来说明一下如何在CI框架下实现验证码登录. 实现验证码的思路很简单,首先随机生成几位验证 ...

  9. RBAC权限框架_MVC权限框架

    RBAC权限框架(Role-Based Access Control)基于角色的权限访问控制的框架,通过用户-角色-权限的关联,非常方便的进行权限管理,在这里不再说明什么是RBAC,请自行百度. 谢谢 ...

最新文章

  1. 计算机基础教案(XP操作系统)
  2. SaaS系统给企业带来了哪些优势
  3. boost::hana::ext::std::vector_tag用法的测试程序
  4. 数据仓库中捕获变化数据(CDC,Changed Data Capture)的四种手法
  5. Pro*c源程序中使用宿主结构保存查询结果
  6. java 匿名初始化_Java:双括号初始化 /匿名内部类初始化法
  7. python做一个linux网卡,Linux系统Python可以选择不同网卡进行网络访问吗?
  8. python执行原理是什么意思_简述Python程序的执行原理。
  9. 《SAP后勤模块实施攻略—SAP在生产、采购、销售、物流中的应用》——2.7 可配置制造...
  10. MTV和MVC的区别
  11. 解决tkinter卡死问题
  12. HTML+CSS小米注册登录界面
  13. 掌握业务流程图符号,提高业绩不再没有头绪
  14. 华三交换机dhcp 保留地址
  15. vim 快捷键 总结-编辑文件
  16. ping 命令的用法大全(图文详解)
  17. sFTP 上传或下载文件与文件夹
  18. 写一篇关于乡愁的作文1000字以上
  19. vue3查看当前路由
  20. Mapbox + ECharts 实现简单迁徙图

热门文章

  1. Ubuntu下OpenCV的使用示例
  2. html-mode简单使用
  3. pyalgotrade教程5--多标的策略
  4. 艾妮记账本Web开发(开发版)
  5. Java 实现文档在线预览功能
  6. UnityTCP发送接收图片
  7. 【VBA研究】Excel信息对比及单元格颜色设置
  8. 在 VMware 虚拟机中设置固定的 ip 地址
  9. 风控模型中特征重要度的两种筛选方法
  10. 从0开始搭建preact开发环境