`
daemon_chen
  • 浏览: 4283 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

3.Utm详细实现-用户生命流程

阅读更多

Utm详细实现-用户生命流程

 

1.用户生命流程:

 

首先,最基本的 就是“游客” 和“用户” 之间身份的转变:

客户端连接到服务端后,这个时候认为连接的客户端是一个游客;客户端请求登录且登录成功后则转变成一个用户;如果用户退出,则又变回游客。

 

 

 

 

 

然后,再看每个操作(登录、退出、断线)的具体流程:

 

 

用户登录:

用户登录过程主要分成两部分:登录检查(OnUserLoginCheckHandler) 和 登录(OnUserLoginHandler)

  1. 登录检查:对用户的账号密码等信息经行验证(在这个阶段,这个请求时属于一个游客发起的请求,由游客请求线程池中的线程处理)
  2. 登录:专注于处理登录业务(在这个阶段,这个请求已经属于一个用户发起的请求了,由utm线程调度)。(默认情况下,游客请求线程池和用户请求线程池是同一个线程池,可以根据需要更改(建议通过更改游客请求过滤器(IVisitorRequestFilter)实现类实现))

 

详细流程:

  1. 当用户发送登录请求到服务端后,先经过UTM过滤器(UserThreadModeFilter)再到 游客请求过滤器(默认实现为VisitorRequestFilterNotQueue),在游客请求过滤器中调用游客请求线程池处理该请求(触发对OnUserLoginCheckHandler的调用)。

 

  1. 在登录检查中将调用抽象方法loginCheck验证用户名密码等信息,如果失败则直接在loginCheck方法给前端返回登录失败信息,如果成功则会调用UserFlagBusiness 的设置用户标志位(SetLoginFlag)方法(用户登录标志位 是 utm最重要的标志位,用于标识用户是否已经登录,在哪里登录,详细解释可以看类UserLogoutCheckBussiness注释);如果用户没有登录,则直接将 登录任务(OnUserLoginHandler)放入用户的处理队列中,由qtm线程处理;如果用户已经登录了,则先通知在登录的用户退出登录,然后将用户的登录信息放入到UserLogoutCheckBussiness的”等待退出用户队列”中,由UserLogoutCheckBussiness继续处理(utm会保证旧的用户退出了才允许新的用户登录)。

 

  1. UserLogoutCheckBussiness是自己一个独立的线程在运行,它周期性的检查所有在队列中的用户,如果有用户已经退出了,则将 登录任务(OnUserLoginHandler)放入用户的处理队列中,由qtm线程处理;如果旧的用户超过一定时间依然没有退出,则会调用UserLogoutCheckBussiness.waitLogoutTimeOut方法,可以在其中通知前端登录失败信息。

 

  1. 接下来就到登录处理(OnUserLoginHandler),会先调用loginLinkCheck方法检查该连接是否依然在线,如果返回false则会终止登录过程并回收申请了的相关资源,如果成功则执行userLogin方法,在userLogin中处理登录的业务。

 

关于loginLinkCheck的详细说明:

登录成功连接检查

(该用户已经通过了登录检查,现在再次确认下连接是否还在,

如果连接已经断开了,那么将会触发回收处理

(userResource.failInLoginLinkCheck和serFlagBusiness.rollBackLoginFlagWhenLinkDisable ))

 

关于为什么要有loginLinkCheck问题:

有些socket的封装框架给的不是说一个socket断开了的事件或者回调(例如SmartFoxServer),而是在当用户登录后才会有用户的断线事件,设置这个loginLinkCheck方法就是为了处理这样的问题,在loginLinkCheck里面可以调用这些封装框架的登录处理,如果登录失败(用户已经断开了),那么就认为是在登录处理过程中用户断线了,也视为没有登录成功,将会回收相应的资源和标志位,如果登录成功,则接下来用户如果断线了,那么Disconect事件就会被触发=>OnUserDisconectHandler必定被触发。(也就是在loginLinkCheck中要设置用户已经登录的标志)

 

这个方法如果返回true, 则接下来将会执行userLogin方法,

而且用户断线OnUserDisconectHandler必定被触发,且一定在userLogin方法之后(断线事件会被放到qtm队列中,qtm保证一个用户的任务被顺序执行)

 

 

(图片看不清可以右键保存到本地后再打开浏览)

 

 

用户退出或用户断线:

用户断线和用户退出只有一个会被触发,因为用户调用退出后,其将变成游客,所以他的断线不会触发用户断线事件。用户断线和用户退出是为了处理业务上更方便区分,其都是继承AbstractOutHandler的。

 

详细流程:

  1. 当用户发送退出请求到服务端后,先经过UTM过滤器(UserThreadModeFilter)再到 用户请求过滤器(默认实现为RequestFrequentFilter),在用户请求过滤器中将 退出任务(OnUserLogoutHandler)放入用户的处理队列中,由qtm线程处理(触发对OnUserLogoutHandler的调用)。 注:如果是用户断线,则会封装成一个用户断线请求

 

  1. 在用户退出或断线处理中(AbstractOutHandler),首先会检查用户是否是登录状态(user.isLogining),如果不是登录状态则不处理(防止在用户退出后马上掉线,这个时候用户退出任务未被处理,此时认为该连接对应的是一个用户,所以会将断线事件放入任务队列中,导致用户断线和用户退出被重复调用),如果是登录状态则调用相应的业务处理方法userLogout/userDisconect

 

  1. 分发用户退出或者用户断线事件

 

  1. 通知 资源管理器 用户退出

 

  1. 调用UserFlagBusiness. removeLoginFlag 回收用户标志位(详细解释可以看类UserLogoutCheckBussiness注释)

 

(图片看不清可以右键保存到本地后再打开浏览)

 

 

 

 

1. Utm简介

2. Utm 模块设计

3. Utm详细实现-用户生命流程

4. Utm详细实现-用户资源管理

5.Utm线程模型

6. Utm示例-公共部分

7. Utm示例-SmartFoxServer集成

8. Utm示例-Netty集成

 

 

 

分享到:
评论

相关推荐

    Git-2.33.0.2-x64-bit

    安装详见“https://blog.csdn.net/Passerby_Wang/article/details/120767020?ops_request_misc=&request_id=&biz_id=102&utm_term=git%202.33.0.2&utm_medium=distribute.pc_search_result.none-task-blog-2~all~...

    Cisco 思科 1921 路由器 IOS c1900-universalk9-mz.SPA.157-3.M7.rar

    【Cisco 思科 1921 路由器 IOS c1900-universalk9-mz.SPA.157-3.M7.rar】这个压缩包文件是为Cisco 1921系列路由器提供的操作系统镜像,即Cisco IOS(Internetwork Operating System)的更新版本。Cisco IOS是思科...

    Eclipse的C/C++自动补全插件org.eclipse.cdt.ui-7.3.100.202111091601

    1-104121203-blog-117118786.235%5Ev43%5Epc_blog_bottom_relevance_base1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-1-104121203-blog-117118786.235%5Ev43%...

    mysql-5.7.38-winx64.zip

    mysql-5.7.38-winx64.zip 使用说明 ....pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-120140475-null-null.185^v2^control&utm_term=mysql&spm=1018.2226.3001.4450

    华为HCIE-Security基础篇和高级篇培训视频教程.rar

    1-课程介绍.mp4,网盘文件 2-防火墙简介.mp4 3-安全策略及状态监测.mp4 4-源NAT.mp4 5-目的NAT双向NAT-SLB.mp4 6-双机热备(1).mp4 ...utm-应用行为过滤_rec.mkv utm-邮件过滤_rec.mkv utmurl过滤_rec.mkv

    MIT- BIH 正常窦性心律数据 nsrdb-16265

    数据源:...应用:DFA与DCCA计算 如何自定义下载:...utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-14.topblog&utm_relevant_index=19

    .NET Core sdk-3.0.100-win-x86

    core sdk-3.0.100-win-x86 .NET Core 3.0 管网下载地址 https://dotnet.microsoft.com/download/visual-studio-sdks?utm_source=getdotnetsdk&utm_medium=referral

    postman-linux-x64.tar.gz

    The Postman app postman-linux-x64.tar.gz 官方 2022.09.14 下载 Linux 64 bit 因网络不方便, 下载官方版的放此 出处: https://www.postman.com/downloads/?utm_source=postman-home

    H3C secPath UTM配置视频.zip

    目录 01-配置接口.exe 02-配置管理.exe 03-设备重启.exe 04-软件升级.exe 05-特征库升级.exe 06-配置PPPoE.exe 07-配置NAT-动态地址转换.exe 08-配置NAT-静态地址转换.exe 09-配置NAT-内部服务器.exe ...

    802.11-2012.pdf.rar

    IEEE 802.11-2012版本协议文档 The current revision, IEEE Std 802....— IEEE Std 802.11uTM-2011: Interworking with External Networks (Amendment 9) — IEEE Std 802.11sTM-2011: Mesh Networking (Amendment 10)

    spice-guest-tools-0.164.3.iso

    使用utm虚拟机虚拟化Windows10 的必备组件1

    aliyun-java-vod-upload-1.4.11.zip

    教程:...utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

    spice-guest-tools-0.164.4

    用于mac m系列芯片用UTM安装虚拟机后,解决无法调整分辨率的问题

    adb-platform-tools-r34.0.4-windows.zip

    - 设备连接:通过USB或Wi-Fi连接电脑和Android设备,实现设备的调试。 - 日志记录:获取设备系统的日志输出,帮助开发者分析应用运行时的问题。 - 应用管理:安装、卸载、更新应用程序,支持APK文件的无线推送...

    H3C SecPath UTM系列视频配置案例视频与文档.zip

    目录 01-配置接口.exe 02-配置管理.exe 03-设备重启.exe 04-软件升级.exe 05-特征库升级.exe 06-配置PPPoE.exe 07-配置NAT-动态地址转换.exe 08-配置NAT-静态地址转换.exe 09-配置NAT-内部服务器.exe ...

    glew-2.1.0.tgz

    [Gitter](https://badges.gitter.im/nigels-com/glew.svg)](https://gitter.im/nigels-com/glew?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Download]...

    Cartopy-0.20.2-cp39-cp39-win_amd64.zip

    1. **地理坐标系统支持**:Cartopy提供了多种地理坐标系统(如UTM,极地投影,等角投影等),使用户能够轻松转换和绘制不同坐标系下的地图。 2. **地图要素**:它包含各种地图要素类,如海岸线、国家边界、湖泊、...

    android-studio-ide-173.4720617-linux.zip

    jdk可以在https://download.csdn.net/download/tan3739/9476680?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158787025919725219940697%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fdownload.%2522%257D&request_id=158787025919725219940697&biz_id=1&utm...

    GDAL-3.2.3-cp39-cp39-win_amd64.zip

    在Windows x64平台上,GDAL通常以预编译的二进制形式提供,以便于用户快速安装和使用。 **文件格式:.whl** `.whl`是Python的二进制分发格式,它类似于其他语言的预编译包。这种格式使得Python包的安装过程更为...

    Python库 | stac_fastapi.types-2.1.0-py3-none-any.whl

    4. **CRS (Coordinate Reference System)**: 定义了地理空间数据的坐标系统,如WGS84,UTM等。 5. **Extent**: 描述Item或Collection的空间范围,包括最小和最大的经度、纬度值。 6. **Temporal Extent**: 描述...

Global site tag (gtag.js) - Google Analytics