Class ConnectionlessBootstrap

java.lang.Object
org.jboss.netty.bootstrap.Bootstrap
org.jboss.netty.bootstrap.ConnectionlessBootstrap
All Implemented Interfaces:
ExternalResourceReleasable

public class ConnectionlessBootstrap extends Bootstrap
A helper class which creates a new server-side Channel for a connectionless transport.

Only for connectionless transports

This bootstrap is for connectionless transports only such as UDP/IP. Use ServerBootstrap instead for connection oriented transports. Do not use this helper if you are using a connection oriented transport such as TCP/IP and local transport which accepts an incoming connection and lets the accepted child channels handle received messages.

Configuring channels

Options are used to configure a channel:
 ConnectionlessBootstrap b = ...;

 // Options for a new channel
 b.setOption("localAddress", new InetSocketAddress(8080));
 b.setOption("tcpNoDelay", true);
 b.setOption("receiveBufferSize", 1048576);
 
For the detailed list of available options, please refer to ChannelConfig and its sub-types.

Configuring a channel pipeline

Every channel has its own ChannelPipeline and you can configure it in two ways. The recommended approach is to specify a ChannelPipelineFactory by calling 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;
   }
 }
 

The alternative approach, which works only in a certain situation, is to use the default pipeline and let the bootstrap to shallow-copy the default pipeline for each new 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());
 
Please note 'shallow-copy' here means that the added ChannelHandlers are not cloned but only their references are added to the new pipeline. Therefore, you cannot use this approach if you are going to open more than one Channels or run a server that accepts incoming connections to create its child channels.

Applying different settings for different Channels

ConnectionlessBootstrap is just a helper class. It neither allocates nor manages any resources. What manages the resources is the ChannelFactory implementation you specified in the constructor of ConnectionlessBootstrap. Therefore, it is OK to create as many ConnectionlessBootstrap instances as you want with the same ChannelFactory to apply different settings for different Channels.
  • Constructor Details

  • Method Details

    • bind

      public Channel bind()
      Creates a new channel which is bound to the local address which was specified in the current "localAddress" option. This method is similar to the following code:
       ConnectionlessBootstrap b = ...;
       b.bind(b.getOption("localAddress"));
       
      Returns:
      a new bound channel which accepts incoming connections
      Throws:
      IllegalStateException - if "localAddress" option was not set
      ClassCastException - if "localAddress" option's value is neither a SocketAddress nor null
      ChannelException - if failed to create a new channel and bind it to the local address
    • bind

      public Channel bind(SocketAddress localAddress)
      Creates a new channel which is bound to the specified local address.
      Returns:
      a new bound channel which accepts incoming connections
      Throws:
      ChannelException - if failed to create a new channel and bind it to the local address
    • connect

      public ChannelFuture connect()
      Creates a new connected channel with the current "remoteAddress" and "localAddress" option. If the "localAddress" option is not set, the local address of a new channel is determined automatically. This method is similar to the following code:
       ConnectionlessBootstrap b = ...;
       b.connect(b.getOption("remoteAddress"), b.getOption("localAddress"));
       
      Returns:
      a future object which notifies when the creation of the connected channel succeeds or fails
      Throws:
      IllegalStateException - if "remoteAddress" option was not set
      ClassCastException - if "remoteAddress" or "localAddress" option's value is neither a SocketAddress nor null
      ChannelPipelineException - if this bootstrap's pipelineFactory failed to create a new ChannelPipeline
    • connect

      public ChannelFuture connect(SocketAddress remoteAddress)
      Creates a new connected channel with the specified "remoteAddress" and the current "localAddress" option. If the "localAddress" option is not set, the local address of a new channel is determined automatically. This method is identical with the following code:
       ConnectionlessBootstrap b = ...;
       b.connect(remoteAddress, b.getOption("localAddress"));
       
      Returns:
      a future object which notifies when the creation of the connected channel succeeds or fails
      Throws:
      ClassCastException - if "localAddress" option's value is neither a SocketAddress nor null
      ChannelPipelineException - if this bootstrap's pipelineFactory failed to create a new ChannelPipeline
    • connect

      public ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress)
      Creates a new connected channel with the specified "remoteAddress" and the specified "localAddress". If the specified local address is null, the local address of a new channel is determined automatically.
      Returns:
      a future object which notifies when the creation of the connected channel succeeds or fails
      Throws:
      ChannelPipelineException - if this bootstrap's pipelineFactory failed to create a new ChannelPipeline