热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Netty的工作机制

本文简单的介绍下Netty是如何工作的,其中一个核心的:ChannelPipeline是一个类似于拦截器模式的设计,数据从head传递到tail,经过处理之后再从t

本文简单的介绍下Netty是如何工作的,可以用一个简易的图描述如下:

为什么说这是一个简易的图呢,因为Netty中远不止这些,只是为了大致描述下Netty工作的流程,还有很多细节上的东西都没有描述出来。

首先Netty有一个针对 Socket 的抽象: Channel
,所有的数据读写操作都会在这个 Channel
上执行,每个 Channel
有一个 ChannelPipeline
,他负责管理这个 Channel
中的所有 ChannelHandler
。想要具体了解 ChannelPipeline
可以看笔者写的另一篇文章:Netty中的ChannelPipeline。

ChannelPipeline
是一个类似于拦截器模式的设计,数据从 head 传递到 tail ,经过处理之后再从 tail 传递到 head ,你可以在 ChannelPipeline
中进行可重用的业务逻辑处理,在Netty中已经通过这种方式实现了内置的编解码器。

举个简单的例子,我们可以把数据的传递过程想象成很多人在地里摘西瓜。

我们有很多人一个挨一个的从西瓜地一直排到卡车边上,西瓜就是我们要传递的 Data
, 每个人就相当于一个 ChannelHandlerContext
,他手里有一个扫描的枪就相当于 ChannelHandler

  • 第一个人把西瓜从地里摘起来之后用他的枪扫了下,发现是个完整的西瓜,然后就传给了第二个人;

  • 第二个人拿到西瓜之后也用他的枪扫了一下,发现这个西瓜确实已经熟了,然后就传给了第三个人;

  • 第三个人拿到西瓜之后也用他的枪扫了一下,发现这个西瓜纹理清晰,然后就继续传给了第四个人;

  • 。。。

  • 最后一个人拿到西瓜之后用枪扫了一下,发现这个西瓜的尺寸符合标准,然后就把西瓜装到卡车上了。

至此西瓜已经从地里被运送到了卡车上,但是中间的过程中只要有任何一个人的检测结果不符合他的要求,那么他就可以对这个西瓜做出他自己的处置,比如可以直接将西瓜丢弃掉,或者告诉前一个人说这个西瓜不符合标准。

PS:ChannelHandlerContext是一个将数据从一个ChannelHandler传递到下一个ChannelHandler的辅助类,在ChannelPipeline中所有的ChannelHandlerContext会形成一个双向的链表,这个在后面的章节会详细的介绍。





推荐阅读
  • 吃透Netty源码系列四之NioEventLoop
    吃透Netty源码系列四之NioEventLoop新启动的线程的作用执行NioEventLoop的run方法执行任务一(通道注册register0)doRegisterpipeli ... [详细]
  • 前言最近一段时间在整公司项目里一个功能的优化,用到了多线程处理。期间也是踩了不少的坑,在这里想说下我遇到的问题和注意事项。以及怎样知道启动的那些多线程都 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • 本文介绍了在Windows系统下安装Python、setuptools、pip和virtualenv的步骤,以及安装过程中需要注意的事项。详细介绍了Python2.7.4和Python3.3.2的安装路径,以及如何使用easy_install安装setuptools。同时提醒用户在安装完setuptools后,需要继续安装pip,并注意不要将Python的目录添加到系统的环境变量中。最后,还介绍了通过下载ez_setup.py来安装setuptools的方法。 ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
  • 本文整理了Java中io.netty.handler.codec.http.FullHttpRequest.content()方法的一些代码示例,展示了Fu ... [详细]
  • 详解Netty Zero Copy机制
    NettyZeroCopy的巧妙设计让Netty从众多高性 ... [详细]
  • 分库分表  ShardingJDBC (详解 1/6)
    狂创客圈经典图书:《NettyZookeeperRedis高并发实战》面试必备+面试必备+面试必备【博客园总入口】疯狂创客圈经典图书:《SpringCloud、Nginx高并发核心 ... [详细]
author-avatar
上海传安光通科技有限公司_839
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有