建议:netty大部分的理解问题都可以通过查询相应类的javadoc文档查到。netty的javadoc文档写的是图文并茂啊:-)
学习netty,需要搞清楚几个概念:
channel
channelpipeline
upstream,downstream
future
upstream,downstream:可以用下图帮助理解:
【引用于
Netty Tutorial Part 1: Introduction to Netty
by nickman
】
upstream event由channelUpstreamHandler处理,downstream event由channelDownstreamHandler处理,一般UpstreamHandler或DownstreamHandler的处理顺序由其加入channelPipeline的顺序决定,UpstreamHandler的加入不影响DownstreamHandler的加入顺序,如(从左至右依次加入channelPipeline):
UpstreamHandler0,DownstreamHandler0,UpstreamHandler1,DownstreamHandler1
Upstream event处理顺序:UpstreamHandler0,UpstreamHandler1
Downstream event处理顺序:DownstreamHandler1,DownstreamHandler0
之后应用时最好理解FrameDecoder和ReplayingDecoder,直接参考javadoc就足够了。
FrameDecoder可以通过不断重新调用decode方法解析需要的数据帧
而ReplayingDecoder则巧妙的使用exception返回的方式,简化问题,使得我们可以通过直接调用buffer的相应读取方法进行帧的解析。同时为了弥补性能上的损失,提供了状态转换的方式提高帧解析的效率。
---------------------------------------------------------------------------------------------------------------------------------
multichannel client解决方法:one channelFactory, many ClientBootstraps
只是用一个ChannelFactory进行资源的分配和管理,然后每个Channel的特殊配置则由ClientBootstrap确定。
相当于实现了connect(inetaddress,channelPipeline[特定的])这样的组合!!
ps:解决方案是直接在javadoc中的注释中看到的!!看来所有的问题都可以通过javadoc解决!