Channel

1)Channel

channel是通讯的载体,对应通讯的一端,在BIO中对应Socket,NIO中对应SocketChannel,Netty中对应NioSocketChannel,ServerSocket同理。
channelhandler是通道的处理器,一个channel往往有多个handler
channelpipeline是handler的容器,装载并管理handler的顺序(本质是双向链表)

如图,channel创建时,会对应创建一个channelpipeline,pipeline首先会记录一个头部的处理器handler,当pipeline进行分发时,先分发给头部,然后依次执行,执行handler全部执行完成。

同时,channel创建后,会注册进EventLoop之中,EventLoop会监听事件的发生。不同的事件调用handler不同的处理方法,让流程运转起来。

可以调用对应的方法来查看各种状态

channel生命周期,对应四种状态,分别为:
A) ChannelUnregistered 已创建但还未被注册到监听器中
B) ChannelRegistered 已注册到监听器EventLoop中
C) ChannelActive 连接完成处于活跃状态,此时可以接收和发送数据
D) ChannelInactive 非活跃状态,代表连接未建立或者已断开

channelhandler生命周期,对应三种状态,分别为:
A) handlerAdded 把handler添加到pipeline之中
B) handlerRemoved 从pipeline中移除
C) exceptionCaught 在处理过程中有错误产生

创建channel源码分析

以服务端启动为例
ChannelFuture future = serverBootstrap.bind(8888).sync();参数设置
serverBootstrap.channel(NioServerSocketChannel.class)【AbstractBootstrap】 启动对象的父类
------------------------------------------------------------------ public ChannelFuture bind(int inetPort) {return bind(new InetSocketAddress(inetPort));}public ChannelFuture bind(SocketAddress localAddress) {validate();return doBind(ObjectUtil.checkNotNull(localAddress, "localAddress"));}private ChannelFuture doBind(final SocketAddress localAddress) {final ChannelFuture regFuture = initAndRegister();final Channel channel = regFuture.channel();.......}final ChannelFuture initAndRegister() {Channel channel = null;try {channel = channelFactory.newChannel();init(channel);} .......}【ReflectiveChannelFactory】  工厂实现类------------------------------------------------------------------   public T newChannel() {try {return constructor.newInstance();} catch (Throwable t) {throw new ChannelException("Unable to create Channel from class " + constructor.getDeclaringClass(), t);}}

在启动对象调用bind()或connect()方法时,会创建channel
本质上通过反射,使用工厂的反射实现类创建对应的实例,此时实例对象的类型是通过channel参数来设置的

Netty原理:Channel相关推荐

  1. 精尽 Netty 原理与源码专栏( 已经完成 61+ 篇,预计总共 70+ 篇 )

    只更新在笔者的知识星球,欢迎加入一起讨论 Netty 源码与实现. 目前已经有 1000+ 位球友加入- 进度:已经完成 60+ 篇,预计总共 70+ 篇,完成度 90% . 对应 Netty 版本号 ...

  2. (高级)Dubbo 第五章 Dubbo及RocketMQ底层-Netty原理

    Netty原理 Netty 是一个高性能.异步事件驱动的NIO 框架,基于JAVA NIO 提供的API 实现.它提供了对TCP.UDP 和文件传输的支持,作为一个异步NIO 框架,Netty 的所有 ...

  3. netty自定义channel id

    netty自定义channel id.netty custom channel id 搞搞netty时发现默认的id很长,无法直接自定义. 于是我网上搜索了search一下,发现没有相关文章,那就自己 ...

  4. netty 进程挂起_这可能是目前最透彻的Netty原理架构解析

    本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件.整体架构,知其然且知其所以然,希望给大家在实际开发实践.学习开源项目方面提供参考. Netty 是一个异步事件驱动的网络应用程序 ...

  5. Netty原理和使用

    Netty是一个高性能 事件驱动的异步的非堵塞的IO(NIO)框架,用于建立TCP等底层的连接,基于Netty可以建立高性能的Http服务器.支持HTTP. WebSocket .Protobuf. ...

  6. Netty原理五:ChannelFuture、DefaultChannelPromise对象解析

    文章目录 1. 前言 2. 原理解析 2.1 ChannelFuture 调用 sync() 的作用 2.2 Channel 调用的 closeFuture() 是什么 1. 前言 学习Netty的时 ...

  7. Netty原理三:NioEventLoop如何处理客户端连接

    文章目录 前言 原理解析 总结 前言 Netty服务端存在类型为 NioEventLoopGroup 的 Boss 和 Worker,Boss 接收到客户端连接后,将客户端 Channel 注册到 W ...

  8. Netty原理架构解析

    本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件.整体架构,知其然且知其所以然,希望给大家在实际开发实践.学习开源项目方面提供参考. Netty 是一个异步事件驱动的网络应用程序 ...

  9. 这可能是目前最透彻的Netty原理架构解析

    转载自:https://www.toutiao.com/i6620280257846968840/?tt_from=weixin&utm_campaign=client_share&w ...

  10. 初探Netty:Netty原理、核心组件、数据容器以及运行机制

    Netty 是一个异步事件驱动的通信框架,可用于搭建高性能协议服务器和客户端. 一.NIO Selector机制是NIO的核心: 当客户端请求时,就创建一个scoketChannel,并注册到Sele ...

最新文章

  1. export default 和export 的区别
  2. 趣学python3(46)--求素数
  3. 不可重入锁和可重入锁
  4. VB6调用API打开目标文件所在文件夹且选中目标文件
  5. Java 位运算符 深入理解
  6. MIT Scheme编译scm文件
  7. Java 二分排序法
  8. 【经典算法题】排列序列
  9. m序列的产生原理及其性质
  10. 去除水晶报表小数点最后多余的0
  11. 高能预警:SFDC安全技术大会将于11月19日在北京举办,岂安科技CEO罗启武受邀演讲
  12. 如果你没有读过苏世民的《我的经验与教训》 ,可以看看这篇精华语录: 25条工作和生活原则...
  13. 创客必备!树莓派知识大扫盲
  14. 110配线架打法图解_110配线架的打线方法图例
  15. tpshop开源商城为什么不能免费商用运营
  16. Dubbo Admin部署(Dubbo 2.7.X)
  17. STM32 CubeMax TCRT5000L光电对管巡线 原理与实现
  18. 【Garmin】- 佳明运动表盘推荐及参数说明
  19. 有关于计算机英语的论文题目,容易写的计算机英语论文选题 计算机英语论文题目哪个好...
  20. PHP毕业设计毕设辅导课(10):PHP While循环

热门文章

  1. 边缘计算以及kubeedge概念的通俗解释
  2. python cartopy绘制中国区域(包含国界、省界、十段线以及海南诸岛)
  3. JVM笔记(B站宋红康课件)
  4. Ms08067漏洞复现
  5. Redhat Crash Utility-Ramdump
  6. 物联网行业网络解决方案_不同行业的物联网挑战
  7. PSnbsp;08人物抠图
  8. 『开源项目』基于STM32的智能垃圾桶之语音播报
  9. c语言编木马程序,5分钟教会!C语言远程控制木马:“控制端”制作,附送源码!...
  10. 【2021版】想要专升本你不得不看的全干货_吐血整理_专升本_计算机文化基础(四)