设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 560|回复: 1

Netty:数据处理流程

[复制链接]

186

主题

2360

金钱

5118

积分

高级用户

发表于 2016-9-23 14:37:03 | 显示全部楼层 |阅读模式
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(事件处理器),它的作用是:

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

2、处理兴趣事件。

3、交给下一个ChannelHandler处理。


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


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

作者:救火队长

209

主题

5930

金钱

8861

积分

高级用户

发表于 2017-2-9 15:15:22 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表