8 引导

服务器致力于使用一个父Channel 来接受
来自客户端的连接,并创建子Channel 以用于它们之间的通信;而客户端将最可能只需要一个
单独的、没有父Channel 的Channel 来用于所有的网络交互。(正如同我们将要看到的,这也
适用于无连接的传输协议,如UDP,因为它们并不是每个连接都需要一个单独的Channel。)
为什么引导类是Cloneable 的
你有时可能会需要创建多个具有类似配置或者完全相同配置的Channel。
为了支持这种模式而又不需要为每个Channel 都创建并配置一个新的引导类实例,
AbstractBootstrap 被标记为了Cloneable在一个已经配置完成的引导类实例上调用clone()方法将返回另一个可以立即使用的引导类实例。 注意,这种方式只会创建引导类实例的EventLoopGroup的一个浅拷贝,
所以,后者将在所有克隆的Channel实例之间共享。
这是可以接受的,因为通常这些克隆的Channel的生命周期都很短暂,
一个典型的场景是——创建一个Channel以进行一次HTTP请求。

 

关于IllegalStateException 的更多讨论
在引导的过程中,在调用bind()或者connect()方法之前,必须调用以下方法来设置所需的组件:
 group();
 channel()或者channelFactory();
 handler()。
如果不这样做,则将会导致IllegalStateException。对handler()方法的调用尤其重要,因
为它需要配置好ChannelPipeline。

ServerChannel 的实现负责创建子Channel,这些子Channel 代表了已被接受的连接。

 

我们在这一节中所讨论的主题以及所提出的解决方案都反映了编写Netty 应用程序的一个一

般准则:尽可能地重用EventLoop,以减少线程创建所带来的开销。

原文地址:https://www.cnblogs.com/lakeslove/p/13082426.html