SessionFilter用于一些实际的操作后。
SessionFilter是通过SessionFilterChain调用的,SessionFilterChain不断的next,让每一个filter都起作用。
各个filter的优先级别是怎么样的呢:
protected SessionFilter nextFilter() {
SessionFilter filter = null;
if (dispatchFilter != null) {
filter = dispatchFilter;
dispatchFilter = null;
} else if ((reversed && --cursor >= 0)
|| (!reversed && ++cursor < appFilters.length)) {
filter = appFilters[cursor];
} else if (operateFilter != null) {
filter = operateFilter;
operateFilter = null;
} else if (decodeFilter != null) {
filter = decodeFilter;
decodeFilter = null;
} else {
filter = handlerFilter;
handlerFilter = null;
}
return filter;
}
private final SessionFilter[] appFilters = filters;
private int cursor = -1;
private SessionFilter dispatchFilter = DISPATCH_FILTER;
private SessionFilter operateFilter;
private SessionFilter decodeFilter = packetDecoderFilter;
private SessionFilter handlerFilter = SESSION_HANDLER_FILTER;
大部分都是写死了的。
operateFilter必须通过构造方法传进去,一般很少用这个。
我们能扩展的是appFilters 。session的addSessionFilter其实改变的就是这个appFilters 。所以用的时候直接用addSessionFilter就好了。
public synchronized void addSessionFilter(int index, SessionFilter filter) {
if (filter != null) {
index = Math.max(0, Math.min(filters.length, index));
SessionFilter[] newFilters = new SessionFilter[filters.length + 1];
System.arraycopy(filters, 0, newFilters, 0, index);
System.arraycopy(filters, index, newFilters, index + 1,
filters.length - index);
newFilters[index] = filter;
filters = newFilters;
}
}
还有个经常扩展的地方是:session.setSessionHandler。SessionHandler是怎么起作用的呢。handlerFilter,而且这里的handlerFilter是写死了的,
private static final SessionHandlerFilter SESSION_HANDLER_FILTER = new SessionHandlerFilter();
private SessionFilter handlerFilter = SESSION_HANDLER_FILTER;
这个SessionHandlerFilter 会去调用SessionHandler。
所以对于session的扩展其实都是通过filter来起作用的。而且扩展的地方也就是
session.addSessionFilter();
session.setSessionHandler();
session设置解码的话,
session.setPacketDecoder
是通过
private SessionFilter decodeFilter = packetDecoderFilter;
是在read()的时候,触发filterchain的packetReceived方法,然后调用decodeFilter 解码。
session设置编码的话,是在send方法中直接编码的,没有通过filter。
public Future send(Object obj, int priority) {
Packet packet = null;
try {
packet = encoder.encode(this, obj);
} catch (Exception e) {
dispatchException(e);
return new DefaultFuture(this, false);
}
return send(obj, packet, priority);
}
可以看到SessionFilter和SessionHandler这两个接口的方法是一样的,可见他们的关系很密切,其实就是SessionHandler被SessionFilter调用。
- 大小: 38.3 KB
分享到:
相关推荐
Cindy-3.0b1-src这个版本是Cindy框架的源代码包,对于开发者来说,了解其源码可以帮助深入理解NIO框架的设计原理和实现细节。下面将详细介绍这个框架可能包含的关键知识点: 1. **Java NIO基础**:Cindy是建立在...
通过阅读源码,你可以了解到如何实现几何变换、碰撞检测、光线追踪等图形学基础算法。 Cindy库主要包括以下几个关键部分: 1. **几何数据结构**:Cindy提供了多种数据结构来表示几何对象,如点、线段、多边形等。...
cindy.jar 源码工具包
基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip ...
9. **连接池(Connection Pool)**:为了提高性能,Cindy可能实现了连接池,用于复用已建立的连接,减少新建连接的开销。 10. **协议处理(Protocol Handling)**:Cindy可能包含对TCP、UDP等常见网络协议的支持,...
JAVA源码异步IO框架CindyJAVA源码异步IO框架Cindy
5. **Cindy源码分析**:通过阅读和分析Cindy的源码,我们可以深入理解其内部工作原理,包括事件循环的实现、回调机制的调度以及如何优雅地处理并发问题。这对于提升Java并发编程和系统优化的能力非常有价值。 6. **...
Netty、Mina、Cindy都是不错的NIO开源框架,后两者都是在Netty的基础上演化出来的。所以要学习好Java的异步通信框架,这三个都是不可多得的好材料。 本资源仅供学习和参考使用,若要进行开发,请下载相应的Jar包
在源码层面,Cindy可能采用了面向对象的设计模式,通过类和接口来封装各种IO操作和事件处理。同时,为了保持代码的可读性和可维护性,Cindy可能会遵循一定的设计原则,如单一职责原则、开闭原则等,并使用模块化设计...
《Java异步IO框架Cindy深度解析》 在Java编程领域,异步I/O(Asynchronous Input/Output)已经成为高性能网络应用开发的关键技术之一。它允许程序在等待数据准备就绪时执行其他任务,显著提高了系统资源利用率和...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
Packages with 71 components for all delphi versions (since D7) to build Windows 32/64 bit applications: VCL controls (labels, buttons, panels, Edits, TabControls, StaticText) with features like ...
《Cindy组件:全Delphi版本v3.23完整源码详解》 Cindy组件是为Delphi开发者提供的一套强大且美观的界面控件库,特别适用于那些追求个性化和高质量用户界面的项目。在"V3.23 Full Source"版本中,开发者将获得完整的...
Packages with 76 components for all delphi versions (since D7) to build Windows 32/64 bit applications: VCL controls (labels, buttons, panels, Edits, TabControls, StaticText) with features like ...
delphi 控件,优秀的界面设计工具 TcyBevel: multi colored bevels. - TcyPanel: runtime resize feature, multi colored bevels, gradient and shadow feature. - TcyAdvPanel: like TcyPanel plus wallpaper ...
Cindy是一个这样的框架,它旨在简化Java中的异步编程模型,提供更好的性能和可扩展性。让我们深入探讨Cindy框架以及Java异步I/O的相关知识点。 ### 1. Java的异步I/O模型 在传统的Java I/O模型中,如BIO(Blocking...
下面我们将深入探讨Java异步IO的基本概念、Cindy框架的特点以及如何使用Cindy进行实际开发。 首先,理解Java中的异步I/O。在Java标准库中,NIO(New IO)提供了一种异步I/O操作的机制。传统的Java IO基于阻塞I/O...
Netty、Mina、Cindy都是不错的NIO开源框架,后两者都是在Netty的基础上演化出来的。所以要学习好Java的异步通信框架,这三个都是不可多得的好材料。 本资源仅供学习和参考使用,若要进行开发,请下载相应的Jar包。
9. **源代码提供**:作为"Full.Source"版本,该压缩包提供的不仅是编译后的二进制组件,还包括源代码。这意味着开发者可以深入理解其工作原理,根据需要进行修改和扩展。 10. **文档和示例**:好的组件包通常会附带...
Cindy Components v4.43 是一套针对 Delphi 开发者的组件库,旨在提升开发效率并提供丰富的功能,尤其适用于创建用户界面和处理各种应用程序需求。这个版本的 Cindy Components 包含了最新的改进和更新,以确保与...