NIOServerCnxnFactory基于NIO实现了一个多线程的ServerCnxnFactory,线程间的通信都是通过queue来完成的。NIOServerCnxnFactory包含的线程如下:
NIOServerCnxnFactory.AcceptThread
,用来监听端口并接收连接,然后把该连接分派给selector线程。NIOServerCnxnFactory.SelectorThread
,每个selctor线程平均负责1/N的连接。使用N个selector线程的原因在于,在大量连接的场景下,select()操作本身可能会成为性能瓶颈。protected WorkerService workerPool;
,用来负责socket的读写。如果N为0,那么selector线程自身会进行socket读写。NIOServerCnxnFactory.ConnectionExpirerThread
,用来关闭空闲而且没有建立session的连接。这几种线程相互配合的原理如下:
private ExpiryQueue<NIOServerCnxn> cnxnExpiryQueue;
维护,并由ConnectionExpirerThread周期性检查、关闭过久未被激活的连接。