apache mina: IoSession结构剖析

来源:互联网 发布:养生软件下载 编辑:程序博客网 时间:2024/06/04 13:13
NioSocketSession(NioSession).<init>(IoProcessor<NioSession>, IoService, Channel)
NioSocketSession.<init>(IoService, IoProcessor<NioSession>, SocketChannel) 
NioSocketAcceptor.accept(IoProcessor<NioSession>, ServerSocketChannel)
NioSocketAcceptor.accept(IoProcessor, Object) 
AbstractPollingIoAcceptor$Acceptor.processHandles(Iterator<H>) 
AbstractPollingIoAcceptor$Acceptor.run() 


public abstract class NioSession extends AbstractIoSession {


    /** An id generator guaranteed to generate unique IDs for the session */


    private static AtomicLong idGenerator = new AtomicLong(0);

    /** The FilterChain created for this session */
    private final IoFilterChain filterChain;
  /**
     * 
     * Creates a new instance of NioSession, with its associated IoProcessor.
     * <br>
     * This method is only called by the inherited class.
     *
     * @param processor The associated IoProcessor
     */
    protected NioSession(IoProcessor<NioSession> processor, IoService service, Channel channel) {
        super(service);
        this.channel = channel;
        this.processor = processor;
        filterChain = new DefaultIoFilterChain(this);
         // Set a new ID for this session
        sessionId = idGenerator.incrementAndGet();
    }
}
在创建IoSession时,每一个IoSession都有自己独立的DefaultIoFilterChain。
在IoSession中有2个重要的成员变量。DefaultIoSessionAttributeMap 是通过ConcurrentHashMap实现的。

DefaultWriteRequestQueue是通过ConcurrentLinkedQueue实现的。


Provides data structures to a newly created session.


public interface IoSessionDataStructureFactory 
{
    IoSessionAttributeMap getAttributeMap(IoSession session) throws Exception;
    WriteRequestQueue getWriteRequestQueue(IoSession session) throws Exception;
}


public class DefaultIoSessionDataStructureFactory implements IoSessionDataStructureFactory {


    public IoSessionAttributeMap getAttributeMap(IoSession session) throws Exception {
        return new DefaultIoSessionAttributeMap();
    }


    public WriteRequestQueue getWriteRequestQueue(IoSession session) throws Exception {
        return new DefaultWriteRequestQueue();
    }
}


private static class DefaultIoSessionAttributeMap implements IoSessionAttributeMap {
private final ConcurrentHashMap<Object, Object> attributes = new ConcurrentHashMap<Object, Object>(4);
}


private static class DefaultWriteRequestQueue implements WriteRequestQueue {
/** A queue to store incoming write requests */
private final Queue<WriteRequest> q = new ConcurrentLinkedQueue<WriteRequest>();
}


0 0