org.jboss.netty.bootstrap
类 ClientBootstrap

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

public class ClientBootstrap
extends Bootstrap

一个创建客户端通道和尝试连接的帮助类.

配置一个 channel

Options用来设置一个channel:
 ClientBootstrap b = ...;
 
 // 一个channel的选项集
 b.setOption("remoteAddress", new InetSocketAddress("example.com", 8080));
 b.setOption("tcpNoDelay", true);
 b.setOption("receiveBufferSize", 1048576);
 
要了解更多有效选项集的详细信息,请参阅ChannelConfig和相应子类.

配置一个channel pipeline

每个channel都拥有自己的 ChannelPipeline,你可以通过两个方式设置. 一个推荐的方式是通过调用Bootstrap.setPipelineFactory(ChannelPipelineFactory)方法 .
 ClientBootstrap 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设置:

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


构造方法摘要
ClientBootstrap()
          创建一个没有ChannelFactory设置的实例.
ClientBootstrap(ChannelFactory channelFactory)
          使用指定的ChannelFactory创建一个实例.
 
方法摘要
 ChannelFuture connect()
          使用当前的 "remoteAddress"属性和"localAddress"属性尝试一个连接.
 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
 

构造方法详细信息

ClientBootstrap

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


ClientBootstrap

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

方法详细信息

connect

public ChannelFuture connect()
使用当前的 "remoteAddress"属性和"localAddress"属性尝试一个连接. 如果 "localAddress" 属性没有设置,新通道的本地地址会自动检测. 该方法和以下代码很相似:
 ClientBootstrap 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" 属性没有设置 ,新通道的本地地址会自动检测. 该方法与下面代码完全相同:
 ClientBootstrap 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对象,该future对象在连接成功或失败时会收到通知
抛出:
ChannelPipelineException - 如果这个启动类的 pipelineFactory 方法创建一个ChannelPipeline失败时抛出异常