5.Utm线程模型

原创
2016/03/28 10:17
阅读数 190

Utm线程模型

 

游客请求和用户请求分别调用UserThreadModeFilter的handleVisitorRequest和handleUserRequest方法,之后再调用各自的过滤器(在UserThreadMode实例化时传入)处理。

默认的游客处理器:VisitorRequestFilterNotQueue:并没有采取队列的形式,直接调用线程池去处理请求。

默认的用户请求处理器:RequestFrequentFilter:将消息放入用户的qtm任务队列中,并触发qtm线程去处理请求;该Filter还会过滤用户频繁的请求( minGap毫秒内超过ringSize个请求,而且违反次数超过illegalMax次,则会认定请求过于频繁)(更详细说明可以查看该类的说明)

 

如下图,用户线程池为ExcutorService1,游客线程池为ExcutorService2,默认情况下两个使用的其实是同一个线程池,既:ExcutorService1= ExcutorService2,如需要修改,可以调用UserThreadMode的最基本的构造方法(该构造方法由开发者指定游客过滤器和用户过滤器(可以为其指定不同的线程池),其他的构造方法会尝试帮用户构建部分的内容,使得使用起来更加的方便)或者继承重写UserThreadMode的构造方法。

 

Utm对于用户任务队列的长度并没有限制,而执行线程池ExcutorService是会有长度限制的,utm使用的线程池必须继承LimitedUnboundedThreadPoolExecutor,该类的构造函数参数limitedQueueSize就是队列长度的限制,实际执行中有可能超过该长度,因为utm不会尝试抛弃重要的请求(用户退出、断线等IRequestHandler.isLimited返回false的处理器),但是如果是普通的请求,则当队列满的时候会调用该处理器的queueFull方法(建议只做简单处理,因为服务器队列满往往意味着已经不堪重负了(也有可能是队列长度和线程数量没有设置好,导致无法发挥服务器的处理能力))。

 

 

 

 

 

 

1.Utm简介

2. Utm 模块设计

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

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

5.Utm线程模型

6. Utm示例-公共部分

7. Utm示例-SmartFoxServer集成

8. Utm示例-Netty集成

9.(1.0.2版本更新)用户队列管理 与 用户异常处理

 

展开阅读全文
打赏
1
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部