org.jboss.netty.channel.socket.oio
类 OioClientSocketChannelFactory

java.lang.Object
  继承者 org.jboss.netty.channel.socket.oio.OioClientSocketChannelFactory
所有已实现的接口:
ChannelFactory, ClientSocketChannelFactory, ExternalResourceReleasable

public class OioClientSocketChannelFactory
extends java.lang.Object
implements ClientSocketChannelFactory

创建一个基于SocketChannel的客户端阻塞I/O的ClientSocketChannelFactory .它利用好的旧的阻塞I/O API,众所周知当它服务人数较少的连接时能产生更好的吞吐量和延迟.

线程工作机理

OioClientSocketChannelFactory里只有一种类型的线程;worker线程.

Worker线程

就像传统的阻塞I/O线程模型一样,每个连接的Channel都有一个专用的worker线程.

线程的生命周期和正常关机

Worker线程会从在创建一个OioClientSocketChannelFactory时指定的Executor 获得(如. workerExecutor.)因此,你必须确定指定的Executor可以被足够多的线程使用.

Worker线程被延迟的获取,然后当没有任何东西需要处理时释放.当worker线程被释放,所有关联的资源也被释放.因此,要正常的关闭一个服务, 你应该做到以下几点:

  1. 通常使用ChannelGroup.close()关闭工厂创建的所有通道,然后
  2. 调用releaseExternalResources().
请确保关闭执行器之前所有Channel已经关闭.否则,你会获得一个RejectedExecutionException 并且相应的资源可能没有适当的释放.

限制

通过该工厂创建的SocketChannel不支持异步操作.任何I/O请求如"connect""write" 都会以阻塞方式执行.


构造方法摘要
OioClientSocketChannelFactory(java.util.concurrent.Executor workerExecutor)
          创建一个实例.
 
方法摘要
 SocketChannel newChannel(ChannelPipeline pipeline)
          创建和打开一个新的Channel,并使用指定的 ChannelPipeline附加到新的 Channel.
 void releaseExternalResources()
          释放该工厂依赖的外部资源.
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

OioClientSocketChannelFactory

public OioClientSocketChannelFactory(java.util.concurrent.Executor workerExecutor)
创建一个实例.

参数:
workerExecutor - 执行I/O worker线程的Executor
方法详细信息

newChannel

public SocketChannel newChannel(ChannelPipeline pipeline)
从接口 ChannelFactory 复制的描述
创建和打开一个新的Channel,并使用指定的 ChannelPipeline附加到新的 Channel.

指定者:
接口 ChannelFactory 中的 newChannel
指定者:
接口 ClientSocketChannelFactory 中的 newChannel
参数:
pipeline - 准备附加到新ChannelChannelPipeline
返回:
返回新的通道

releaseExternalResources

public void releaseExternalResources()
从接口 ChannelFactory 复制的描述
释放该工厂依赖的外部资源. 外部资源是指不是由该工厂创建的资源. 例如, 在工厂指定的Executor就是外部资源. 当这些资源不被该工厂使用或不是应用程序的一部分时 ,你可以很方便的调用该方法去释放所有外部资源.然而如果一个由该工厂管理的打开通道资源被释放时会导致意料.

指定者:
接口 ChannelFactory 中的 releaseExternalResources
指定者:
接口 ExternalResourceReleasable 中的 releaseExternalResources