Netty:数据处理流程

Netty作为异步的、事件驱动一个网络通信框架,使用它可以帮助我们快速开发高性能高可靠性的网络服务。

为了更好的使用Netty来解决开发中的问题,学习Netty是很有必要的。

Netty现在主流有三个版本:Netty3、Netty4、Netty5。这三个版本中,变化最大的要数线程模型了,各版本的线程模型均不相同。但是有一点是变化不大的,那就是Channel模型,因而数据处理流程也不会有太大的变化。所以本篇就来说一下Netty的数据处理流程,各版本的线程模型会后续说明。

Channel 模型

关于Netty Channel的模型,做了一个简易图:

一个Channel中包括一个Socket、一个ChannelPipeline。一个ChannelPipeline中有一个ChannelSink和多个ChannelHandler。ChannelHandler分为两种:UpstremHandler、DownstreamHandler。

不论是读数据还是写数据都要经过Channel中的ChannelPipeline。读数据的过程是从Socket到ChannelPipeline,由ChannelPipeline交给里面的UpstreamHandler(或者叫做InBoundHandler)从下到上依次处理 。写数据时,由要经过ChannelPipeline里面在DownStreamHandler(或者是OutBoundHandler)由上到下依次处理。

Channel的创建

Channel主要分为两种:ServerSocketChannel、SocketSocketChannel。这里不对是否是NIO作区分。

ServerSocketChannel的创建在bind时自动完成,SocketChannel的创建由Netty帮助完成。不论是客户端在创建连接时, 还是服务端接收到客户端连接时,SocketChannel的创建都是由Netty帮助完成

在创建Channel时,就会自动调用相应的ChannelPipeline创建器来创建了。在创建ChannelPipeline时,可以由用户配置相关的ChannelHandler。ServerSocketChannel可以由用户定制一个ChannelHandler,SocketChannel则可以由用户定制多个ChannelHandler。

在各版本中用于定制的方法可能是不同的。

ChannelSink

这个组件主要见于V3

ChannelSink的有2个作用:

1、当出现异常时,通过exceptionCaught向沿着Pipeline上传递ExceptionEvent,(channel.getPipeline().sendUpsteam(new DefaultExceptionEv ent(channel,ex)));

2、当一个Message或者一个Events沿着Pipeline从上到下执行完所有的ChannelHandler处理后,进入ChannelSink的eventSunk方法。

下面就说一下Server端、Client端的Sink的作用:

ServerSocketPipelineSink eventSunk:

  • 当创建ServerSocket时,提交Boss任务。
  • 当接收到Socket时,创建SocketChannel,并将一个Worker任务交给Worker Executor。

ClientSocketPipelineSink eventSunk:

1)当在Pipeline上流转的是ChannelEvent时:

·如果是创建连接的event,将一个worker任务交给worker executor

·如果是兴趣event,则注册兴趣事件。

2)当在Pipeline上流转的是message时:

将要写的数据放到写队列中,然后调用NioWorker的writeFromUserCode方法。

ChannelHandler

Netty是由事件驱动的框架,任何操作操作都是由事件来驱动的。

ChannelHandler就是一个Event Hander(事件处理器),它的作用是:

·处理IO事件(读写),例如读取数据,并解码。

·处理兴趣事件。

·交给下一个ChannelHandler处理。

写数据有两种方式可以触发

上述呢,简单了说了一下Channel中各组件的作用以及处理流程,知道这些东西,已经可以帮助我们理解并使用Netty了。

时间: 2024-10-21 10:57:25

Netty:数据处理流程的相关文章

项目开发流程,以及什么是数据分析平台,再者为什么要做数据分析平台,数据来源,数据处理流程

一:项目开发流程 1.项目调研 了解项目的初始需求,然后结合市场的技术,看一下能否完成 2.需求分析 明确一个项目到底需要做什么? 最终做出的是什么样子? 重要性:一个好的需求分析能够明确项目的后续发展主题方向 3.方案设计 概要设计: 项目结构,技术选型 详细设计: 按照模块设计 4.编码实现 具体实现 5.测试 功能测试:功能是否达到了需求 集成测试:模块之间的兼容性 压力测试:高并发,多用户下,系统是否可以运行 用户测试:根据用户的建议进行修改 6.上线 试运行阶段:新系统与老系统同时在线

Netty启动流程剖析

编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo.Rocketmq.Hadoop等,针对高性能RPC,一般都是基于Netty来构建,比如soft-bolt.总之一句话,Java小伙伴们需要且有必要学会使用Netty并理解其实现原理. 关于Netty的入门讲解可参考:Netty 入门,这一篇文章就够了 Netty的启动流程(ServerBootstrap),就是创建NioEventLoopGroup(内部可能包

DolphinScheduler工作流调度引擎 致力于解决数据处理流程中错综复杂的依赖关系

DS是什么 Apache DolphinScheduler是一个分布式去中心化,易扩展的可视化DAG工作流任务调度系统.致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用.DolphinScheduler曾用名为"EasyScheduler",由易观开发,美国时间2019年8月29日,正式通过顶级开源组织Apache基金会的投票决议,以全票通过的优秀表现正式成为Apache孵化器项目.由于名称已在国外某App使用,经社区讨论与投票后改名为DolphinSch

Netty writeAndFlush() 流程与异步

Netty writeAndFlush()方法分为两步, 先 write 再 flush @Override public ChannelFuture writeAndFlush(Object msg, ChannelPromise promise) { DefaultChannelHandlerContext next; next = findContextOutbound(MASK_WRITE); ReferenceCountUtil.touch(msg, next); next.invok

Netty源码分析第1章(Netty启动流程)-------->第1节: 服务端初始化

第一章:  Server启动流程 概述: 本章主要讲解server启动的关键步骤, 读者只需要了解server启动的大概逻辑, 知道关键的步骤在哪个类执行即可, 并不需要了解每一步的运作机制, 之后会对每个模块进行深度分析 第一节:服务端初始化 首先看下在我们用户代码中netty的使用最简单的一个demo: EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup = new NioEventL

大数据入门之大数据处理流程

随着互联网的发展,大数据也在逐渐彰显出自己的优势特点,那么关于大数据的处理流程,你是否了解?让我们一起来看看大数据的处理流程. 第一,数据采集 定义:利用多种轻型数据库来接收发自客户端的数据,并且用户可以通过这些数据库来进行简单的查询和处理工作. 特点和挑战:并发系数高. 使用的产品:MySQL,Oracle,HBase,Redis和 MongoDB等,并且这些产品的特点各不相同. 第二,统计分析 定义:将海量的来自前端的数据快速导入到一个集中的大型分布式数据库 或者分布式存储集群,利用分布式技

Hinet 日本数据处理流程

---恢复内容开始--- 推荐网站: http://ju.outofmemory.cn/entry/138571 ridnet.py 将Hinet 的cnt 数据提取为sac数据,参考网站 http://ju.outofmemory.cn/entry/138571 我选择的台站在震中附近,均匀地包围着震中. 由于实验数据中近震频谱范围为0-2.4hz,远震频谱范围为0-0.6hz,.所以多频段滤波时采用的近震滤波频段和远震滤波频段是不同的. 求解理论震相走时 taup_time -km 1.17

Bluedroid协议栈HCI线程数据处理流程分析

在蓝牙enable的过程中会进行多个线程的创建以及将线程与队列进行绑定的工作.该篇文章主要分析一下处理hci数据这个 线程. void BTU_StartUp(void) { ... btu_bta_msg_queue = fixed_queue_new(SIZE_MAX); btu_general_alarm_hash_map = hash_map_new(BTU_GENERAL_ALARM_HASH_MAP_SIZE, hash_function_pointer, NULL, (data_f

企业级大数据处理方案03-数据流程

数据处理过程分为数据挖掘和数据分析,广义上说数据分析泛指整个过程,然而数据分析大的流程大致相同,如图: 数据挖掘一般都要经过过滤.漂洗.匹配三个过程: 1.过滤:主要将数据中的不适合分析的数据过滤掉,就好比产品流水线的残次品一样,对数据进行组粒度的过滤,其规则可按数据大小,字符长短: 2.漂洗:也称格式化,对数据进行分块,数据也有组成的,有时间.数据源.数据体等等,就好比头.身体.脚一样.将数据变成我们想要的格式,此过程也是打标签的过程,意将数据分类处理. 3.匹配:匹配就是抽取字段,将数据中的