public class ServerBootstrap extends Bootstrap
Channel
and accepts
incoming connections.
ConnectionlessBootstrap
instead for
connectionless transports. Do not use this helper if you are using a
connectionless transport such as UDP/IP which does not accept an incoming
connection but receives messages by itself without creating a child channel.
ChannelFactory
via
bind()
and bind(SocketAddress)
.
Once successfully bound, the parent channel starts to accept incoming connections, and the accepted connections become the children of the parent channel.
Options
are used to configure both a
parent channel and its child channels. To configure the child channels,
prepend "child."
prefix to the actual option names of a child
channel:
For the detailed list of available options, please refer toServerBootstrap
b = ...; // Options for a parent channel b.setOption("localAddress", newInetSocketAddress
(8080)); b.setOption("reuseAddress", true); // Options for its children b.setOption("child.tcpNoDelay", true); b.setOption("child.receiveBufferSize", 1048576);
ChannelConfig
and its sub-types.
parentHandler
property is
provided.
ChannelPipeline
and you can configure it
in two ways.
The recommended approach is to specify a ChannelPipelineFactory
by
calling Bootstrap.setPipelineFactory(ChannelPipelineFactory)
.
ServerBootstrap
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 addedServerBootstrap
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.
Channel
sServerBootstrap
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
ServerBootstrap
. Therefore, it is OK to create as many
ServerBootstrap
instances as you want with the same
ChannelFactory
to apply different settings for different
Channel
s.构造器和说明 |
---|
ServerBootstrap()
Creates a new instance with no
ChannelFactory set. |
ServerBootstrap(ChannelFactory channelFactory)
Creates a new instance with the specified initial
ChannelFactory . |
限定符和类型 | 方法和说明 |
---|---|
Channel |
bind()
Creates a new channel which is bound to the local address which was
specified in the current
"localAddress" option. |
Channel |
bind(java.net.SocketAddress localAddress)
Creates a new channel which is bound to the specified local address.
|
ChannelFuture |
bindAsync()
Bind a channel asynchronous to the local address
specified in the current
"localAddress" option. |
ChannelFuture |
bindAsync(java.net.SocketAddress localAddress)
Bind a channel asynchronous to the specified local address.
|
ChannelHandler |
getParentHandler()
Returns an optional
ChannelHandler which intercepts an event
of a newly bound server-side channel which accepts incoming connections. |
void |
setFactory(ChannelFactory factory)
Sets the
ServerChannelFactory that will be used to perform an I/O
operation. |
void |
setParentHandler(ChannelHandler parentHandler)
Sets an optional
ChannelHandler which intercepts an event of
a newly bound server-side channel which accepts incoming connections. |
getFactory, getOption, getOptions, getPipeline, getPipelineAsMap, getPipelineFactory, releaseExternalResources, setOption, setOptions, setPipeline, setPipelineAsMap, setPipelineFactory, shutdown
public ServerBootstrap()
ChannelFactory
set.
setFactory(ChannelFactory)
must be called before any I/O
operation is requested.public ServerBootstrap(ChannelFactory channelFactory)
ChannelFactory
.public void setFactory(ChannelFactory factory)
ServerChannelFactory
that will be used to perform an I/O
operation. This method can be called only once and can't be called at
all if the factory was specified in the constructor.setFactory
在类中 Bootstrap
java.lang.IllegalStateException
- if the factory is already setjava.lang.IllegalArgumentException
- if the specified factory
is not a
ServerChannelFactory
public ChannelHandler getParentHandler()
ChannelHandler
which intercepts an event
of a newly bound server-side channel which accepts incoming connections.null
if no parent channel handler is set.public void setParentHandler(ChannelHandler parentHandler)
ChannelHandler
which intercepts an event of
a newly bound server-side channel which accepts incoming connections.parentHandler
- the parent channel handler.
null
to unset the current parent channel handler.public Channel bind()
"localAddress"
option. This method is
similar to the following code:
ServerBootstrap
b = ...;
b.bind(b.getOption("localAddress"));
This operation will block until the channel is bound.java.lang.IllegalStateException
- if "localAddress"
option was not setjava.lang.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 addresspublic Channel bind(java.net.SocketAddress localAddress)
ChannelException
- if failed to create a new channel and
bind it to the local addresspublic ChannelFuture bindAsync()
"localAddress"
option. This method is
similar to the following code:
ServerBootstrap
b = ...;
b.bindAsync(b.getOption("localAddress"));
ChannelFuture
which will be notified once the Channel is
bound and accepts incoming connectionsjava.lang.IllegalStateException
- if "localAddress"
option was not setjava.lang.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 addresspublic ChannelFuture bindAsync(java.net.SocketAddress localAddress)
ChannelFuture
which will be notified once the Channel is
bound and accepts incoming connections