详解即时通讯开发框架Netty 4.x之Channel和Pipeline

Channel概念与java.nio.channel概念一致,用以连接IO设备(socket、文件等)的纽带。Netty 4.x之后的Channel变化较大,官方的唬人的说法是无法通过简单的关键字替换进行迁移。用得较多应该是:ChannelHandler接口重新设计,换了个较为清晰的名字;write不会主动flush。由于笔者3.x、4.x都没用过,所以也无法深入理解版本的变化了。

 

Channel的IO类型主要有两种:非阻塞IO(NIO)以及阻塞IO(OIO);数据传输类型有两种:按事件消息传递(Message)以及按字节传递(Byte);适用方类型也有两种:服务器(ServerSocket)以及客户端(Socket)。还有一些根据传输协议而制定的的Channel,如:UDT、SCTP等。

Netty按照类型逐层设计相应的类。最底层的为抽象类AbstractChannel,再以此根据IO类型、数据传输类型、适用方类型实现。类图可以一目了然,

Netty的Channel Pipeline实现原理分析

从AbstractChannel分析,它提供了一些IO操作方法,read、write等,Channel仅仅做了一个封装,方法中将参数直接传递给了Channel的Pipeline成员的相应方法。

Pipeline则是Channel里面非常重要的概念。从数据结构的角度,它是一个双向链表,每个节点均是DefaultChannelHandlerContext对象;从逻辑的角度,它则是netty的逻辑处理链,每个节点均包含一个逻辑处理器(ChannelHandler),用以实现网络通信的编/解码、处理等功能。

Pipeline的链表上有两种handler,Inbound Handler和Outbound handler。从Netty内部IO线程接读到IO数据,依次经过N个Handler到达最内部的逻辑处理单元,这种称之为Inbound Handler;从Channel发出IO请求,依次经过M个Handler到达Netty内部IO线程,这种称之为Outbound Handler。内部代码实现流程则是:Head -> Tail (Inbound),Tail -> Head (Outbound)。

逻辑处理器ChannelHandlerInvoker介绍

ChannelPipeline仅仅只是逻辑处理的流程,真正逻辑处理器则是ChannelHandlerInvoker。在获得链表节点后,节点会调用自己的invoker成员执行(invoke)逻辑。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询


    
public ChannelFuture writeAndFlush(Object msg, ChannelPromise promise) {
    DefaultChannelHandlerContext next = findContextOutbound();
    next.invoker.invokeWriteAndFlush(next, msg, promise);
    return promise;
}

 

在DefaultChannelHandlerInvoker中只有一个成员(executor),执行逻辑的过程中,Invoker会先判断当前运行线程是否是executor,如果是则直接运行相应方法,不是则启动子线程运行相应方法。

executor继承自EventExecutor,同时,该对象实现类一般而言也是实现EventLoop接口。EventLoop的实现体现了Netty 4.x的IO线程模型,非常重要,后面再详细解析。

至此,上面简单总结了Channel以及Pipeline的处理流程。Channel.write -> ChannelPipeline.write -> ChannelHandlerContext.write -> ChannelHandlerInvoker.write -> ChannelHandler.write。在这个过程中,我也是捡简单的、流程性的代码总结,像EventLoop、EventExecutor这种核心部分并没有深入总结,压后再详细解说。

wecloud1314
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Netty4.x源码分析详解
06-08
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在深入分析 Netty 4.x 源码之前,我们首先需要了解其核心概念和架构。 Netty 的核心组件包括: 1. **ByteBuf...
Netty网络编程(三):Channel详解
热门推荐
Java+GO+JS全栈工程师-鹤冲天的博客:编程辅导~商务合作~技术交流
01-13 1万+
Channel是连接ByteBuf和Event的桥梁,netty中的Channel提供了统一的API,通过这种统一的API,netty可以轻松的对接多种传输类型,如OIO,NIO等。今天本文将会介绍Channel的使用和Channel相关的一些概念。
Netty4入门(二)
qq5132834的专栏
12-25 290
/** * */ package com.a; /** * */ public class Constant { public final static int HEADER_FLAG = 123456789; } /** * */ package com.a; /** * 请求消息 */ public class RequestMsg { priv...
Netty 源码分析之ChannelPipeline 以4.0.15 final版
Java_Jsp_Ssh的博客
09-19 165
一:ChannelChannelPipeline         每个Channel在初始化时都会在其父类构造器中顺带构建一个ChannelPipeline,unSafe对象;即每个channel都有一个与之关联的channelPipeline;而channelPipelinechannelHandler承载的事件流容器,底层是以DefaultChannelHandlerContext为...
【.Net实用方法总结】 整理并总结.NET 中的 System.IO.Pipelines(管道)
baidu_33146219的博客
10-01 1万+
System.IO.Pipelines是一个库,旨在使在 .NET 中执行高性能 I/O 更加容易。 该库的目标为适用于所有 .NET 实现的 .NET Standard。 `System.IO.Pipelines` 已构建为: - 具有高性能的流数据分析功能。 - 减少代码复杂性。
netty (三) channel & pipeline
Lee_Suoer的博客
12-14 347
channelchannel关系到一个网络socket或者组件的i/o操作的能力。比如读写,连接,绑定 channel向user提供:          channel的当前状态,比如是否打开,是否连接。          channel的配置参数,比如接收数据的buffer大小。           channel支持的读写操作等,例如读写,连接,绑定         和...
使用netty4.X实现的手机游戏分布式服务器,支持tcp,udp,http,w-NettyGameServer.zip
11-06
《基于Netty4.X构建手机游戏分布式服务器的详解Netty是一款高性能、异步事件驱动的网络应用程序框架,常用于开发高效的网络应用,如TCP、UDP和HTTP协议的服务器。在手机游戏领域,Netty因其高效、稳定和灵活性而...
Netty4详解二:开发第一个Netty应用程序
06-10
NettyJava领域的一款高性能、异步事件驱动的网络应用框架,主要用于快速开发可维护的高性能协议服务器和客户端。在本篇文章中,我们将深入探讨如何使用Netty4开发第一个Netty应用程序,以此来理解其核心概念和工作...
跟闪电侠学NettyNetty即时聊天实战与底层原理-book-netty.zip
最新发布
11-07
《跟闪电侠学NettyNetty即时聊天实战与底层原理》是一本深入浅出的Netty技术指南,旨在帮助读者掌握Netty框架,并利用它实现即时聊天应用,同时理解其底层工作原理。NettyJava领域的一款高性能、异步事件驱动的...
使用Netty解决TCP粘包和拆包问题过程详解
08-25
使用Netty解决TCP粘包和拆包问题过程详解 Netty是一个流行的Java网络编程框架,提供了简洁、灵活的API来处理网络编程的各种问题。其中,解决TCP粘包和拆包问题是Netty的一个重要应用场景。本文将详细介绍使用Netty...
Netty6:ChannelPipeline、异步模型
Yisnow.的博客
10-15 354
1、Channel介绍 Channel是通讯的载体,ChannelHandler负责Channel中的逻辑处理; ChannelPipelineChannelHandler的容器,一个Channel包含一个ChannelPipeline,所有ChannelHandler都会注册到ChannelPipeline中,并按顺序组织起来; Netty中,ChannelEvent是数据或者状态的载体,传输数据对应MessageEvent,改变状态对应ChannelStateEvent,当对Channel操作时,会
nettyChannel, ChannelPipeline, ChannelHandler, ChannelHandlerContext 的关系
溺水三千只取一瓢饮
01-02 814
nettyChannel, ChannelPipeline, ChannelHandler, ChannelHandlerContext 的关系 一:channelpipeline 一一对应的 channelpipeline 一一对应的。创建channel时,同时创建pipeline。共生攻灭 pipelinechannel的属性 // pipelinechannel的属性 private final DefaultChannelPipeline pipeline;
netty中的channelpipeline
russwest44的博客
09-12 231
channel,pipeline 只要是channel就会有这个channel上对应的流水线pipeline,这个流水线pipeline上有各种各样的handler处理器,用来给这个channel上流过的东西进行加工。 所以,不仅服务器与客户端之间连接的SocketChannel上有流水线,而且Server服务器与客户端建立accept事件的serverSocketChanel上也有流水线。每个流水线上必有head tail两个处理器,在netty中serverSocketChanel上还有一个acceto
ChannelChannelPipeline
Leon_Jinhai_Sun的博客
01-12 365
相信大家都已经知道,在Netty 中每个Channel 都有且仅有一个ChannelPipeline 与之对应,它们的组成关系如下: 通过上图我们可以看到, 一个Channel 包含了一个ChannelPipeline , 而ChannelPipeline 中又维护了一个由ChannelHandlerContext 组成的双向链表。这个链表的头是HeadContext,链表的尾是TailContext,并且每个ChannelHandlerContext 中又关联着一个ChannelHandler。
io.netty学习(三)Channel 概述
码灵的博客
06-19 2633
前两篇文章我们已经对Netty进行了简单的了解和架构设计原理的剖析。本篇文章我们就来开始对Netty源码的分析,首先我们来讲解 NettyChannel相关的功能和接口。Channel 顾名思义就是管道,代表网络 Socket 或能够进行 I/O 操作的组件的关系。这些 I/O 操作包括读、写、连接和绑定。简单的说,Channel 就是代表连接,实体之间的连接,程序之间的连接,文件之间的连接,设备之间的连接。同时它也是数据入站和出站的载体。
netty io.netty.channel 简介1
weixin_34378922的博客
08-12 781
2019独角兽企业重金招聘Python工程师标准>>> ...
java channelpipeline,Netty源码解读(三)ChannelPipeline
weixin_33277215的博客
03-13 162
Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的“梦境”概念,希望大家喜欢。一层梦境:Channel实现概览在Netty里,Channel是通讯的载体,而ChannelHandler负责Channel中的逻辑处理。那么ChannelPi...
通过源码去认知Netty-io.netty.channel
陈海龙的格物之路
02-23 5180
通过io.netty.channel和io.netty.bootstrap两个package,对netty进行总体认知。进一步查看netty对NIO的封装,了解源码实现,梳理类层次关系与源码流程。
io.netty学习(五)ChannelPipeline
码灵的博客
06-20 803
我们在前面的文章中也对接口做了初步的介绍。Netty 源码分析系列(二)Netty 架构设计以上就是关于的源码分析,相信认真看完了,你就明白Channel和之间的关系。下节我们继续来剖析 Netty 的源码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • https和http的区别 25010
  • 防止网站被爬虫抓取的五种有效方法 21498
  • 怎么简单的生成SSL证书 15078
  • SSL安全证书过期的原因及解决方法 9680
  • SSL安全证书不受信任怎么办 9626

最新评论

  • 聊聊即时通讯开发中Android消息推送

    qq_16887631: 前两天才集成了GoEasy提供的Android websocket sdk,简单好用

  • 防止网站被爬虫抓取的五种有效方法

    起嘛名啊: 对于带外公开访问,无需用户登录的网站,345用不了吧

  • 私有化部署对政企单位的意义

    CSDN-Ada助手: 非常感谢您分享这篇关于私有化部署的博客,这对政企单位来说确实具有很大的意义。我们鼓励您继续深入探讨相关技术,为更多人提供好的解决方案。我们建议您写一篇“基于Docker的容器化部署在企业级应用中的实践”,讲解如何在实际应用中使用Docker进行容器化部署,加速项目的交付和迭代。期待您的精彩分享! 2023年博客之星「城市赛道」年中评选已开启(https://activity.csdn.net/creatActivity?id=10470&utm_source=blog_comment_city ), 博主的原力值在所在城市已经名列前茅,持续创作就有机会成为所在城市的 TOP1 博主(https://bbs.csdn.net/forums/blogstar2023?typeId=3152981&utm_source=blog_comment_city),更有丰厚奖品等你来拿~。

  • https证书含有的信息包括哪些

    故渊at: “客户根据http协议书浏览网址时,电脑浏览器和集群服务器是密文传送。”http是明文传输吧?

  • 即时通讯开发之TCP/IP基本概念

    Passerby_Wang: 写得也太详细了吧,学到了好多 也欢迎博主来我这里指点一二呀表情包表情包表情包

大家在看

  • 跨域是什么?多种方法解决跨域问题 756
  • 【STM32】按键控制LED&光敏传感器控制蜂鸣器(江科大) 381
  • Unsloth 微调 Llama 3 1126
  • 选择性语言建模:下一代语言模型训练方法 1343
  • Ubuntu20.04 cv_bridge按装 99

最新文章

  • 私有化部署对政企单位的意义
  • 即时通讯软件(企业IM)对企业的作用
  • 私有化部署即时通讯为什么更安全
2023年81篇
2022年330篇
2021年245篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码布吉设计公司网站民治百姓网标王永湖网站设计模板东莞高端网站设计西乡百度网站优化排名大运企业网站制作坂田网站优化盐田网站改版广州网站建设设计大芬阿里店铺托管盐田标王坪山模板推广龙华网络广告推广同乐网站推广方案南联网站优化按天收费大浪网站制作设计爱联模板制作沙井百搜标王大运seo双龙阿里店铺运营坪山营销网站深圳标王平湖营销网站福田SEO按效果付费爱联网站制作设计大鹏网站改版吉祥网站制作设计布吉网络推广沙井设计网站宝安标王歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化