org.jboss.netty.bootstrap
类 ConnectionlessBootstrap

java.lang.Object
  继承者 org.jboss.netty.bootstrap.Bootstrap
      继承者 org.jboss.netty.bootstrap.ConnectionlessBootstrap
所有已实现的接口:
ExternalResourceReleasable

public class ConnectionlessBootstrap
extends Bootstrap

一个为无连接传输创建新的服务端Channel的帮助类.

仅仅针对无连接传输

该启动器只针对无连接传输,如UDP/IP. 若是有连接传输则使用 ServerBootstrap代替. 对于面向连接的传输如TCP/IP和接受传入连接并接受子通道接受消息的本地传输,千万不要使用该帮助类.

配置 channels

常常使用Options 方法配置一个 channel:
 ConnectionlessBootstrap b = ...;
 
 // Options for a new channel
 b.setOption("localAddress", new InetSocketAddress(8080));
 b.setOption("tcpNoDelay", true);
 b.setOption("receiveBufferSize", 1048576);
 
要了解更详细的有效属性,请参阅 ChannelConfig 及其子类.

配置一个 channel pipeline

每个channel都拥有自己的 ChannelPipeline,你可以通过两个方式设置. 一个推荐的方式是通过调用Bootstrap.setPipelineFactory(ChannelPipelineFactory)方法 .
 ConnectionlessBootstrap b = ...;
 b.setPipelineFactory(new MyPipelineFactory());
 
 public class MyPipelineFactory implements ChannelPipelineFactory {
   public ChannelPipeline getPipeline() throws Exception {
     // Create and configure a new pipeline for a new channel.
     ChannelPipeline p = Channels.pipeline();
     p.addLast("encoder", new EncodingHandler());
     p.addLast("decoder", new DecodingHandler());
     p.addLast("logic",   new LogicHandler());
     return p;
   }
 }
 

另外一个方法只有在特定的情况使用,是使用默认的pipeline并且让bootstrap使用使用浅拷贝为每个新的channel设置::

 ConnectionlessBootstrap b = ...;
 ChannelPipeline p = b.getPipeline();
 
 // Add handlers to the default pipeline.
 p.addLast("encoder", new EncodingHandler());
 p.addLast("decoder", new DecodingHandler());
 p.addLast("logic",   new LogicHandler());
 
请注意这里的'浅拷贝'的意思仅仅是把ChannelHandler的引用添加到新的管道上,而不是克隆 ChannelHandler. 因此,你不能使用该方法在一个接受进入连接去创建子通道的服务器上打开多于一个的Channel.

为不同的Channel应用不同的设置

ClientBootstrap仅仅是个帮助类. 他不分配和管理任何资源.管理资源是使用ClientBootstrap 在构造方法指定的ChannelFactory类进行管理.因此,你可以在不同的ClientBootstrap实例上使用相同的 ChannelFactory为不同的Channel应该不同的设置.


构造方法摘要
ConnectionlessBootstrap()
          创建一个没有ChannelFactory设置的实例.
ConnectionlessBootstrap(ChannelFactory channelFactory)
          使用指定的ChannelFactory创建一个实例.
 
方法摘要
 Channel bind()
          使用当前"localAddress"属性设置绑定的本地地址创建一个channel.
 Channel bind(java.net.SocketAddress localAddress)
          创建一个绑定到指定的本地地址的channel.
 ChannelFuture connect()
          使用当前的 "remoteAddress"属性和"localAddress"属性创建一个已经连接的channel.
 ChannelFuture connect(java.net.SocketAddress remoteAddress)
          使用指定的remoteAddress 属性和当前的 "localAddress"属性尝试一个新的连接.
 ChannelFuture connect(java.net.SocketAddress remoteAddress, java.net.SocketAddress localAddress)
          使用指定的remoteAddress属性和指定的localAddress属性尝试一个连接.如果 "localAddress" 属性没有设置 ,新通道的本地地址会自动检测.
 
从类 org.jboss.netty.bootstrap.Bootstrap 继承的方法
getFactory, getOption, getOptions, getPipeline, getPipelineAsMap, getPipelineFactory, releaseExternalResources, setFactory, setOption, setOptions, setPipeline, setPipelineAsMap, setPipelineFactory
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

ConnectionlessBootstrap

public ConnectionlessBootstrap()
创建一个没有ChannelFactory设置的实例. Bootstrap.setFactory(ChannelFactory)方法 必须在任何I/O操作请求前被调用.


ConnectionlessBootstrap

public ConnectionlessBootstrap(ChannelFactory channelFactory)
使用指定的ChannelFactory创建一个实例.

方法详细信息

bind

public Channel bind()
使用当前"localAddress"属性设置绑定的本地地址创建一个channel. 该方法和以下代码很相似:
 ConnectionlessBootstrap b = ...;
 b.bind(b.getOption("localAddress"));
 

返回:
返回一个新的已经绑定的接受传入连接的channel
抛出:
java.lang.IllegalStateException - 如果 "localAddress" 属性没有设置则抛出异常
java.lang.ClassCastException - 如果 "localAddress" 属性的值既不是SocketAddress也不是 null时抛出异常
ChannelException - 如果创建新的channel并绑定到本地地址失败时抛出异常

bind

public Channel bind(java.net.SocketAddress localAddress)
创建一个绑定到指定的本地地址的channel.

返回:
返回一个新的已经绑定的接受传入连接的channel
抛出:
ChannelException - 如果创建新的channel并绑定到本地地址失败时抛出异常

connect

public ChannelFuture connect()
使用当前的 "remoteAddress"属性和"localAddress"属性创建一个已经连接的channel. 如果 "localAddress" 属性没有设置,新通道的本地地址会自动检测. 该方法和以下代码很相似:
 ConnectionlessBootstrap b = ...;
 b.connect(b.getOption("remoteAddress"), b.getOption("localAddress"));
 

返回:
返回一个在连接成功或失败时会收到通知的future对象
抛出:
java.lang.IllegalStateException - 如果 "remoteAddress" 属性没有设置则抛出异常
java.lang.ClassCastException - 如果 "remoteAddress" 属性或者 "localAddress" 属性的值既不是SocketAddress也不是null时抛出异常
ChannelPipelineException - 如果这个启动类的 pipelineFactory 方法创建一个ChannelPipeline失败时抛出异常

connect

public ChannelFuture connect(java.net.SocketAddress remoteAddress)
使用指定的remoteAddress 属性和当前的 "localAddress"属性尝试一个新的连接. 如果 "localAddress" 属性没有设置 ,新通道的本地地址会自动检测. 该方法与下面代码完全相同:
 ConnectionlessBootstrap b = ...;
 b.connect(remoteAddress, b.getOption("localAddress"));
 

返回:
返回一个在连接成功或失败时会收到通知的future对象
抛出:
java.lang.ClassCastException - 如果 "remoteAddress" 属性或者 "localAddress" 属性的值既不是SocketAddress也不是null时抛出异常
ChannelPipelineException - 如果这个启动类的 pipelineFactory 方法创建一个ChannelPipeline失败时抛出异常

connect

public ChannelFuture connect(java.net.SocketAddress remoteAddress,
                             java.net.SocketAddress localAddress)
使用指定的remoteAddress属性和指定的localAddress属性尝试一个连接.如果 "localAddress" 属性没有设置 ,新通道的本地地址会自动检测.

返回:
返回一个在连接成功或失败时会收到通知的future对象
抛出:
ChannelPipelineException - 如果这个启动类的 pipelineFactory 方法创建一个ChannelPipeline失败时抛出异常