Netty组件中怎么初始化Channel

发布时间:2021-08-12 10:58:50 作者:Leah
来源:亿速云 阅读:134

本篇文章给大家分享的是有关Netty组件中怎么初始化Channel,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。


一、DefaultChannelPipeline实例化

 

DefaultChannelPipeline随着Channel的创建而创建,即只要创建了Channel就会同时创建与其对应的ChannelPipeline。下面代码是Channel实例化时调用,上篇文章文末的代码。 


Netty组件中怎么初始化Channel


1.ChannelHandlerContext类图结构
 


ChannelHandlerContext直观从命名上看出为ChannelHandler上下文,每次构造DefaultChannelHandlerContext都会传入与之对应的ChannelHandler.


Netty组件中怎么初始化Channel


ChannelHandlerContext类图结构 


Netty组件中怎么初始化Channel



2.ChannelPipeline类图结构
 


从下面类图结构可以看出,ChannelPipeline提供了很多操作链表的方法,addFirst/addLast/addBefore/addLast/remove/replace等,入参为ChannelHandler。ChannelPipeline的各种fire操作均通过HandlerContext进行处理。 


Netty组件中怎么初始化Channel


3.链表关系图示
 


先从下面代码看下运营时的链表结构,截图如下。 


示例代码

Netty组件中怎么初始化Channel


内存结构

Netty组件中怎么初始化Channel


画个示意图来说明ChannelPipeline、ChannelHandlerContext、ChannelHandler的关系。


关系图示

Netty组件中怎么初始化Channel

 

一、Channel初始化 


切换到Channel初始化过程,在客户端引导类Bootstrap调用b.connect()或者服务端引导类ServerBootstrap调用bind()时,会调用到抽象引导类AbstractBootstrap的initAndRegister()。下面红色部分即channel初始化入口。 


Netty组件中怎么初始化Channel


1.客户端初始化    
 

   


@1 客户端初始化代码中,将ChannelHandler通过DefaultChannelHandlerContext加入ChannelPipeline链表中

@2 setChannelOptions以NioChannelOption为例,客户端最后调用到SocketChannelImpl#setOption(); 可以对以下属性进行设置

  • StandardSocketOptions.SO_RCVBUF // 接受缓存区大小

  • StandardSocketOptions.SO_SNDBUF // 发送缓存区大小

  • StandardSocketOptions.SO_LINGER // 设置延迟关闭的时间

  • StandardSocketOptions.IP_TOS // 设置数据包优先级

  • StandardSocketOptions.IP_MULTICAST_TTL // 设置多播组数据的TTL值

  • ... 


2.服务端初始化    
 

   


Netty组件中怎么初始化Channel


@1 setChannelOptions同样以NioChannelOption为例,服务端会调用到ServerSocketChannelImpl#setOption(),参数含义见客户端端初始化@1

@2 ChannelInitializer实现了ChannelHandler加入到了ChannelPipeline的链表中,其中的逻辑在另文分析EventLoopGroup时梳理

以上就是Netty组件中怎么初始化Channel,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

推荐阅读:
  1. netty使用EmbeddedChannel对channel
  2. Flume-ng源码解析之Channel组件

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

netty channel

上一篇:Python中Gitlab Api怎么用

下一篇:PHP怎么根据IP获取地理位置

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》