`
youyu4
  • 浏览: 426032 次
社区版块
存档分类
最新评论

java Netty 之 白话概念

 
阅读更多

java Netty 之 白话概念

 

 

ChannelEvent

 


          
 

 

      先说这个ChannelEvent,因为Netty是基于事件驱动的,就是我们上文提到的,发生什么事,就通知"有关部门"。所以,不难理解,我们自己的业务代码中,一定有跟这些事件相关的处理。在样例代码,我们处理的事件,就是channelConnected。以后,我们还会处理更多的事件。

 

 

      ChannelEvent是和这个Channel相关的IO事件和请求,会由各个ChannelHandler来处理。事件分为上行和下行两种:

 

  • 当服务器从客户端收到一个消息,那么与之相关的就是一个上行事件(upstream event),流水线中的UpstreamChannelHandler会处理它。
  • 如果服务要回应这个客户端,那么与响应消息对应的就是下行事件,pipeline中的DownstreamChannelHandler会处理。站在客户端角度同样很容易理解。

上行事件通常是入站操作(inbound operations)的结果,如 InputStream.read(byte[]),下行事件通常是请求出站操作( outbound operations)比如 OutputStream.write(byte[]), Socket.connect(SocketAddress), and Socket.close()。

 

 

上行事件及发生时机:



 
对于可以有子通道的Channel(如ServerSocketChannel)而言可以有下面俩事件。



 

下行事件及发生时机:



 

 

 

 

ChannelPipeline


        
   

      Pipeline,翻译成中文的意思是:管道,传输途径。也就是说,在这里他是控制ChannelEvent事件分发和传递的。事件在管道中流转,第一站到哪,第二站到哪,到哪是终点,就是用这个ChannelPipeline 处理的。比如:开发事件。先给A设计,然后给B开发。这里最主要工作的就是ChannelPipelineFactory。

 

 

 

 

ChannelHandler

 

      刚说Pipeline负责把事件分发到相应的站点,那么这个站点在Netty里,就是指ChannelHandler。事件到了ChannelHandler这里,就要被具体的进行处理了,我们的样例代码里,实现的就是这样一个处理事件的“站点”,也就是说,你自己的业务逻辑一般都是从这里开始的。其实说白了,ChannelHandler就是Filter,请求经过多个Filter,就能到达我们业务逻辑ChannelHandler。

 

 

下面是一个流程图,请求从下面发送出来,经过UpStream Handler,到了业务逻辑层执行完后,通过DownStream Handler返回给客户端。说白了,


          
 

注意:

我们可以建自己的ChannelHandler,要继承SimpleChannelHandler。

 

 

 

 

Channel



 

有了个部门的协调处理,我们还需要一个从整体把握形势的,所谓“大局观”的部门,channel。

 

channel,能够告诉你当前通道的状态,是连同还是关闭。获取通道相关的配置信息。得到Pipeline等。是一些全局的信息。Channel自然是由ChannelFactory产生的。Channel的实现类型,决定了你这个通道是同步的还是异步的(nio)。

 

 

 

参考:

http://blog.csdn.net/kobejayandy/article/details/11493979

http://www.it165.net/pro/html/201207/3142.html

  • 大小: 21.1 KB
  • 大小: 82.2 KB
  • 大小: 18.6 KB
  • 大小: 39.3 KB
  • 大小: 17.5 KB
  • 大小: 80.7 KB
  • 大小: 14.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics