快速业务通道

nio框架中的多个Selector结构 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
ioProcessor:

protected AbstractPollingIoAcceptor(IoSessionConfig  sessionConfig,              Class<? extends  IoProcessor<T>> processorClass) {          this(sessionConfig, null, new  SimpleIoProcessorPool<T>(processorClass),                  true);      }

这里其实是一个组合模式,SimpleIoProcessorPool和NioProcessor都实现了 Processor接口,一个是组合形成的Processor池,而另一个是单独的类。调用的 SimpleIoProcessorPool的构造函数是这样:

private static final int DEFAULT_SIZE =  Runtime.getRuntime().availableProcessors() + 1;      public SimpleIoProcessorPool(Class<? extends  IoProcessor<T>> processorType) {          this(processorType, null, DEFAULT_SIZE);      }

可以看到,默认的池大小是cpu个数+1,也就是创建了cpu+1个的Selector对 象。它的重载构造函数里是创建了一个数组,启动一个 CachedThreadPool来运 行NioProcessor,通过反射创建具体的Processor对象,这里就不再列出了。

Mina当有一个新连接建立的时候,就创建一个NioSocketSession,并且传入 上面的SimpleIoProcessorPool,当连接初始化的时候将Session加入 SimpleIoProcessorPool:

protected NioSession accept(IoProcessor<NioSession>  processor,              ServerSocketChannel handle) throws  Exception {          SelectionKey key = handle.keyFor (selector);          if ((key == null) || (!key.isValid()) || (! key.isAcceptable()) ) {              return null;          }          // accept the connection from the client          SocketChannel ch = handle.accept();          if (ch == null) {              return null;          }          return new NioSocketSession(this, processor,  ch);      }          private void processHandles(Iterator<H>  handles) throws Exception {              while (handles.hasNext()) {                  H handle = handles.next();                  handles.remove();                  // Associates a new created  connection to a processor,                  // and get back a session                  T session = accept(processor,  handle);                  if (session == null) {                      break;                  }                  initSession(session, null,  null);                  // add the session to the  SocketIoProcessor                  session.getProcessor().add (session);              }          }

nio崇尺嶄議謹倖Selector潤更(3)

扮寂:2010-12-19 BlogJava dennis

紗秘議荷恬頁弓奐匯倖屁侏延楚旺拝庁方怏寄弌朔斤哘議NioProcessor廣過 欺session戦?

private IoProcessor<T> nextProcessor() {          checkDisposal();          return pool[Math.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号