首页 > Web开发 > 详细

DUBBO - Netty 交互 服务器端

时间:2016-04-17 23:26:49      阅读:915      评论:0      收藏:0      [点我收藏+]


Dubbo Remoting 层为Dubbo项目处理底层网络通信的层。类图如下:




技术分享



ChannelHandler是抽象的通道事件处理器,源代码如下。

@SPI
public interface ChannelHandler {

    void connected(Channel channel) throws RemotingException;

    void disconnected(Channel channel) throws RemotingException;

    void sent(Channel channel, Object message) throws RemotingException;

    void received(Channel channel, Object message) throws RemotingException;

    void caught(Channel channel, Throwable exception) throws RemotingException;

}

NettyServer初始化时候,需要两个参数,一个是URL,一个是(ChannelHandler)通道处理器。

  1. URL

        URL为Dubbo框架中用的比较多地方,综合说来,它是一个契约,或者参数集合,用于各个组件的配置。

        在NettyServer构造期间,有如下参数:

  • 通信层的协议---TCP的上层协议

  • 最大连接数

  • 空闲超时

  • 网络IO处理线程数量,默认为处理器+1。(但是很多处理器现在是一个处理器处理两个线程,所以在Netty后续的版本里,默认为 处理器*2 + 1)

  • 最重要的,当然是还有host和port了,没有的,怎么知道绑定在哪个port呢。。。

    2. 对于通道处理器来说,负责处理的,显然就是连接进来的通道所发生的事件咯。但是此处的通道处理器,并不是Netty的Pipeline,中间还需要一层转换,当然除此之外,还有一些其它的操作,比如业务线程委派。

    对于NIO来说,采用了多路复用模型处理网络事件。多路复用的优点是节约了线程上下文切换带来的不必要的CPU的资源的浪费,但是在IO线程里处理业务,显然是不妥当的,因为业务方法,很可能是阻塞的。

      

技术分享

  

       其中Netty区域的类,都是扩展了了Netty自带类。

       InternalDecoder:负责TCP层协议的解析,处理TCP粘包。(当然这个解析也包含序列化的处理)。

       InternalEncoder: 协议封装。

       NettyHandler:客户通道共享的处理器(请参阅Netty的通道处理器模型),转换Netty的通道事件到Dubbo事件。

       NettyServer:处理连接数量。

       MultiMessageHandler:多消息处理。

       HeartbeatHandler:心跳消息。

       AllChannelHandler:委派业务请求到线程池。

    ---------------------------------------------------------------------------------------------------

       最后就是构造NettyServer的通道ChannelHandler,在线程池里面执行,并非Netty的IO线程组。

本文出自 “Tech Doc” 博客,谢绝转载!

DUBBO - Netty 交互 服务器端

原文:http://mindoverflow.blog.51cto.com/11468509/1764791

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!