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>();
}