org.jboss.netty.channel.socket.nio
类 NioDatagramChannelFactory

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

public class NioDatagramChannelFactory
extends java.lang.Object
implements DatagramChannelFactory

用于创建基于NIO的无连接DatagramChannelDatagramChannelFactory .它利用引入了NIO非阻塞I/O模式有效率的服务大数量的并发连接.

线程工作原理

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

Worker线程

一个NioDatagramChannelFactory 会有一个或多个worker线程.一个worker线程会以非阻塞模式为一个或多个 DatagramChannel执行非阻塞的读写操作.

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

所有worker线程会从在创建一个NioDatagramChannelFactory时指定的Executor 获得.因此,你必须确保指定的Executor可以被足够多的线程使用.最好的做法是指定一个 缓存线程池.

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

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

限制

不支持多播.可以使用OioDatagramChannelFactory代替.


构造方法摘要
NioDatagramChannelFactory(java.util.concurrent.Executor workerExecutor)
          创建一个实例.调用该构造方法和指定两倍可用处理器的 NioDatagramChannelFactory(Executor, int)一样.可以通过 Runtime.availableProcessors()获取可用处理器的数量.
NioDatagramChannelFactory(java.util.concurrent.Executor workerExecutor, int workerCount)
          创建一个实例.
 
方法摘要
 DatagramChannel newChannel(ChannelPipeline pipeline)
          创建和打开一个新的Channel,并使用指定的 ChannelPipeline附加到新的 Channel.
 void releaseExternalResources()
          释放该工厂依赖的外部资源.
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

NioDatagramChannelFactory

public NioDatagramChannelFactory(java.util.concurrent.Executor workerExecutor)
创建一个实例.调用该构造方法和指定两倍可用处理器的 NioDatagramChannelFactory(Executor, int)一样.可以通过 Runtime.availableProcessors()获取可用处理器的数量.

参数:
workerExecutor - 执行I/O worker线程的Executor

NioDatagramChannelFactory

public NioDatagramChannelFactory(java.util.concurrent.Executor workerExecutor,
                                 int workerCount)
创建一个实例.

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

newChannel

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

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

releaseExternalResources

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

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