Package org.jboss.netty.bootstrap
Class ConnectionlessBootstrap
java.lang.Object
org.jboss.netty.bootstrap.Bootstrap
org.jboss.netty.bootstrap.ConnectionlessBootstrap
- All Implemented Interfaces:
ExternalResourceReleasable
A helper class which creates a new server-side Applying different settings for different
Channel
for a
connectionless transport.
Only for connectionless transports
This bootstrap is for connectionless transports only such as UDP/IP. UseServerBootstrap
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:
For the detailed list of available options, please refer toConnectionlessBootstrap
b = ...; // Options for a new channel b.setOption("localAddress", newInetSocketAddress
(8080)); b.setOption("tcpNoDelay", true); b.setOption("receiveBufferSize", 1048576);
ChannelConfig
and its sub-types.
Configuring a channel pipeline
Every channel has its ownChannelPipeline
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 implementsChannelPipelineFactory
{ publicChannelPipeline
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:
Please note 'shallow-copy' here means that the addedConnectionlessBootstrap
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
s
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 Channel
s or run a server that accepts incoming connections to
create its child channels.
Applying different settings for different Channel
s
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
Channel
s.-
Constructor Summary
ConstructorsConstructorDescriptionCreates a new instance with noChannelFactory
set.ConnectionlessBootstrap
(ChannelFactory channelFactory) Creates a new instance with the specified initialChannelFactory
. -
Method Summary
Modifier and TypeMethodDescriptionbind()
Creates a new channel which is bound to the local address which was specified in the current"localAddress"
option.bind
(SocketAddress localAddress) Creates a new channel which is bound to the specified local address.connect()
Creates a new connected channel with the current"remoteAddress"
and"localAddress"
option.connect
(SocketAddress remoteAddress) Creates a new connected channel with the specified"remoteAddress"
and the current"localAddress"
option.connect
(SocketAddress remoteAddress, SocketAddress localAddress) Creates a new connected channel with the specified"remoteAddress"
and the specified"localAddress"
.Methods inherited from class org.jboss.netty.bootstrap.Bootstrap
getFactory, getOption, getOptions, getPipeline, getPipelineAsMap, getPipelineFactory, isOrderedMap, releaseExternalResources, setFactory, setOption, setOptions, setPipeline, setPipelineAsMap, setPipelineFactory, shutdown
-
Constructor Details
-
ConnectionlessBootstrap
public ConnectionlessBootstrap()Creates a new instance with noChannelFactory
set.Bootstrap.setFactory(ChannelFactory)
must be called before any I/O operation is requested. -
ConnectionlessBootstrap
Creates a new instance with the specified initialChannelFactory
.
-
-
Method Details
-
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 setClassCastException
- if"localAddress"
option's value is neither aSocketAddress
nornull
ChannelException
- if failed to create a new channel and bind it to the local address
-
bind
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
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 setClassCastException
- if"remoteAddress"
or"localAddress"
option's value is neither aSocketAddress
nornull
ChannelPipelineException
- if this bootstrap'spipelineFactory
failed to create a newChannelPipeline
-
connect
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 aSocketAddress
nornull
ChannelPipelineException
- if this bootstrap'spipelineFactory
failed to create a newChannelPipeline
-
connect
Creates a new connected channel with the specified"remoteAddress"
and the specified"localAddress"
. If the specified local address isnull
, 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'spipelineFactory
failed to create a newChannelPipeline
-