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

6.Utm示例-公共部分

阅读更多

Utm示例-公共部分

 

首先实现各个事件(登录检查、登录、退出、断线)的处理

1. 登录检查:

继承com.dc.utm.handler.login.OnUserLoginCheckHandler类,实现抽象方法:

queueFull:队列满:在该方法中给前端发送信息提示服务器繁忙不受理该请求

loginCheck:登录检查:检查用户的信息是否正确等,如果错误或者不允许登录则给用户返回错误提示并在该方法返回null(程序不会再往下执行),如果通过检查则返回相应的User对象。

logoutLocalUserWhenUserReLogin:退出在服务上的老用户:当通过登录检查后,OnUserLoginCheckHandler就会调用UserFlagBusiness的setLoginFlag方法(该方法会返回成功、用户在本服务登录、用户在其他服务登录)(具体说明可以看该类说明,该类有个简单实现SimpleLocalUserFlagBusiness(仅用于单个服务,并不建议使用,详见UserFlagBusiness说明)),如果返回用户在本服务登录则会调用这个方法;在该方法需要退出在本服务登录的用户。

logoutRemoteUserWhenUserReLogin:退出在其他服务上登录的用户:通知其他服务退出该用户。

 

2. 登录:

继承com.dc.utm.handler.login. OnUserLoginHandler类,实现抽象方法:

loginLinkCheck:登录连接检查(在“Utm详细实现 ->用户生命流程 -> 用户登录 -> 详细流程”中已有说明):在服务上登录成功返回 true,登录失败返回false(可以参考sfs的实现和netty的实现)。

userLogin:用户登录成功:用户登录成功后的业务处理和 给前端返回登录成功。

 

3. 退出:

继承com.dc.utm.handler.logout.OnUserDisconectHandler类,实现抽象方法:

注:LogoutHandler 和OnUserDisconectHandler只有一个会被触发 (LogoutHandler后用户将认为是游客,其断线将不会触发OnUserDisconectHandler)

userLogout:用户退出:用户退出的业务处理和 给前端返回退出成功。

 

4. 断线:

继承com.dc.utm.handler.logout.OnUserDisconectHandler类,实现抽象方法:

注:LogoutHandler 和OnUserDisconectHandler只有一个会被触发 (LogoutHandler后用户将认为是游客,其断线将不会触发OnUserDisconectHandler)

userDisconect:用户断线:用户断线的业务处理。

 

 

 

然后需要实现用户退出线程(UserLogoutCheckBusiness)的抽象方法:

(用户登录时,如果该用户之前已经登录到服务上,则utm会等待老的用户退出后,才执行新的登录,由这个线程在查看老的用户是否登出,utm在UserFlagBusiness的setLoginFlag方法返回不成功时会自动将用户放入到该实例的等待处理用户中)

waitLogoutTimeOut:等待时间超过maxWaitLogoutTime毫秒,用户依然未从原来的服务上退出 (该方法主要是负责通知前端说登录失败)

 

 

 

接着是实例化utm:(sfs和netty实例化只有细微差别,这里给出sfs的示例):

 

1.创建两个cmd对应处理器的Map,在后面我们会往其中加入处理器(在sfs中cmd只能是string类型)

//游客请求cmd和对应的请求处理器

Map<String,IRequestHandler> visitorCmdMapHandler =new HashMap<String, IRequestHandler>();

//用户请求cmd和对应的请求处理器

Map<String,IRequestHandler> userCmdMapHandler =new HashMap<String, IRequestHandler>();

 

2.定义utm的线程池,其中参数32,32为线程数(可以根据实际情况设置),参数500为线程池的队列长度(详细说明见:utm线程模型说明)

//线程池

LimitedUnboundedThreadPoolExecutorpool =

new LimitedUnboundedThreadPoolExecutor(32, 32,0L,

TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(), 500);

 

3.定义事件管理器(提供了 "用户事件", "异常处理事件", "请求了没有注册的cmd事件", "用户请求过于频繁事件" 的基本实现,如有需要可以继承重写该类)

//事件管理器

EventManager<String,Integer, Visitor, Integer, User> eventManager =new EventManager<String, Integer, Visitor,Integer, User>();

 

4.实例化Utm(在构造方法中需要指定 登录的cmd 和 断线的cmd)

//实例化utm模型

userThreadMode

= new UserThreadMode<String, Integer, Visitor, Integer, User>(

Cmd.Login.CMD, Cmd.DisConect.CMD, visitorCmdMapHandler, userCmdMapHandler,pool, eventManager);

 

5.在资源中心中添加用户日志管理器(每个用户的请求和返回的日志,每个用户对应一个目录,如果使用需要注意:1.操作系统中一个进程最大的打开文件的个数,2.操作系统中一个目录下最大的文件数量(这里会采用分级目录的形式确保每一个目录下的文件数量可控))

(这里并非是utm的内容,但可以借鉴该日志资源管理类的申请资源和释放资源)

//添加用户日志资源管理器

userThreadMode.getUserResourceManager().getUserResourceCenter().addUserResource(new UserLoggerResource() );

 

6.实例化用户标志位管理(在该类中有详细的说明)

//用户登录标志位管理(仅测试,详见该类说明和UserFlagBusiness说明)

SimpleLocalUserFlagBusiness<Visitor,Integer, User> userFlagBusiness =new SimpleLocalUserFlagBusiness<Visitor,Integer, User>();

 

7.实例化用户登录处理类(用户登录成功后会调用的处理类)

//实例化用户登录处理类(注意:该类不需要注册到userCmdMapHandler中,如果用户登录检查通过,utm会自动调用该实例处理用户登录)

OnUserLoginHandleronUserLoginHandler = new OnUserLoginHandler(userThreadMode.getUserCenter(),eventManager,

userFlagBusiness, userThreadMode.getUserResourceManager().getUserQueueResource(),

userThreadMode.getUserResourceManager().getUserResourceCenter());

 

8.老用户处理退出线程(上面已经提到)(用户登录时,如果该用户已经在其他客户端登录到服务上,则utm会等待老的用户退出后,才执行新的登录,由这个线程在查看老的用户是否登出)(在后面会启动该线程)

//实例化老用户退出处理类(用户退出检查线程)

UserLogoutConfirmRunnableuserLogoutCheckBusiness =new UserLogoutConfirmRunnable(userThreadMode.getUserCenter(),

userThreadMode.getUserResourceManager().getUserQueueResource(),userThreadMode.getUserRequestFilter(), userFlagBusiness,

onUserLoginHandler, eventManager,userThreadMode.getUserResourceManager().getUserResourceCenter());

 

 

 

9.用户登录检查(登录检查前,连接还不是用户,所以应该放在游客cmd处理器的Map中,如果该检查成功后,就会创建用户相关的资源,并调用前面第7步的用户登录处理类)

//注册游客登录检查的处理器

visitorCmdMapHandler.put(Cmd.Login.CMD,newOnUserLoginCheckHandler(userThreadMode.getUserCenter(), eventManager,

userThreadMode.getUserResourceManager().getUserQueueResource(),userThreadMode.getUserRequestFilter(), userFlagBusiness,

userLogoutCheckBusiness, onUserLoginHandler,userThreadMode.getUserResourceManager().getUserResourceCenter() ));

 

10.用户断线处理器

//注册用户断线的处理器

userCmdMapHandler.put(Cmd.DisConect.CMD,newOnUserDisconectHandler(userThreadMode.getUserCenter(), eventManager,

userFlagBusiness, userThreadMode.getUserResourceManager().getUserResourceCenter() ));

 

11.用户退出处理器

//注册用户退出的处理器

userCmdMapHandler.put(Cmd.Logout.CMD,new LogoutHandler(userThreadMode.getUserCenter(), eventManager,

userFlagBusiness, userThreadMode.getUserResourceManager().getUserResourceCenter() ));

 

12.用户心跳处理器(用作示例:前端和后端如何通过cmd沟通)

//注册用户心跳的处理器

userCmdMapHandler.put(Cmd.Heartbeat.CMD,newHeartbeatHandler());

 

13.启动第8步实例化的用户退出处理线程

//启动用户退出检查线程

Thread userLogoutCheckRunnable= new Thread(userLogoutCheckBusiness);

userLogoutCheckRunnable.setName("userLogoutCheckRunnable");

userLogoutCheckRunnable.start();

 

 

 

 

1. Utm简介

2. Utm 模块设计

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

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

5.Utm线程模型

6. Utm示例-公共部分

7. Utm示例-SmartFoxServer集成

8. Utm示例-Netty集成

 

分享到:
评论

相关推荐

    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)

    华为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

    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 ...

    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 ...

    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

    oracle-instantclient11.2

    oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-jdbc-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-odbc-11.2....

    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%...

    aliyun-java-vod-upload-1.4.11.zip

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

    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~...

    Python库 | utm-0.3.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:utm-0.3.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    kernel-lt-4.4.210-1.el6.elrepo.x86-64.rpm

    CentOS 6内核4.4.210版本,稀缺资源,目前网上已经很难找到了。需要升级CentOS 6内核的可以下载,参见笔者博文https://blog.csdn.net/witton/article/details/119710481?utm_source%20=%20uc_fansmsg。

    utm3-1-5.dmg

    mac windows

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

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

    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

    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...

    .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

    Leaflet.UTM:用于L.LatLng的简单UTM(WGS84)方法

    用法LatLng-&gt; UTM 在任何L.LatLng对象中调用方法utm()以获取UTM坐标对象。 方法toString会将其无缝转换为字符串。 例如,要在标记中创建弹出窗口: marker . bindPopup ( 'UTM: ' + marker . getLatLng ( ) . utm ( ...

    Windows XP 2.utm.zip

    UTM文件

    spice-guest-tools-0.164.3.iso

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

    金山UTM白皮书-统一威胁管理产品

    金山UTM白皮书 金山UTM白皮书 金山UTM白皮书

Global site tag (gtag.js) - Google Analytics