`
NanguoCoffee
  • 浏览: 51201 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

分析Netty工作流程

阅读更多

分析Netty工作流程:

 

下面以Netty中Echo的例子进行流程跟踪,并简要的

服务器启动->客户端连接-> 服务器处理连接-> 服务器处理客户端数据<-> 客户端处理服务器数据

 

1:客户端连接:

 

我们直接看这行代码:

bootstrap.connect(new InetSocketAddress(host, port));

通过帮助类ClientBootstrap来连接服务器。

Debug源码进去发现最后是某个Channel类进行connect操作。 

而这个Channel是如何来的呢?其实是从前面的 ChannelFactory和ChannelPipelineFactory得到的。 

Channel.connect-> AbstractChannel.connect->Channels.connect(…); 

Channels是Channel的帮助类,封装一些常用的操作。在封装操作时,基本都是触发事件。

这里发起一个connectd的Downstream的事件。

 

所有的事件都是丢给ChannelPipeline进行管理,ChannelPipeline使用了责任链模式来将事件传送给注册到Pipeline中的ChannelHandler,由ChannelHandler进行处理。如果遍历了所有的ChannelHandler后则交给ChannelSink进行处理,ChannelSink根据不同的事件进行不同的处理,对于connect事件,ChannelSink发送连接操作后则将该Channel注册到NioWorker中,以后的任何事件都通过NioWorker(封装selector的操作)来进行处理。

 

客户端连接的流程为:

ClientBootstrap.connect –>Channel.connect->

AbstractChannel.connect->Channels.connect(…)

         -> 发送connect事件-> ChannelSink->发起实际的连接操作->将Channel注册给Nioworker

 

2:服务器启动:

         bootstrap.bind(…)-> 触发ServerSocketChannel.open()的事件

->捕捉open事件,channel.bind-> Channels.bind(…) -> 发起bind命令-> PipelineSink进行处理-> 使用socket进行bind,等待连接事件。

 

3: 服务器处理连接:

   服务器启动后,NioServerSocketPipelineSink.Boss.run()在监听accept事件-> 捕捉到accept事件 -> 将NioWorker进行注册NioSocketChannel

-> 向java.nio.SocketChannel注册op_read的监听。

 

4:客户端开始向服务器发送数据:

    当客户端连接Server后,就会发起Connected的upstream事件->通过Pipeline进行处理-> SimpleChannelUpstreamHandler.handleUpstream()->

EchoClientHandler.channelConnected()

 

5:服务器端接收并处理数据

    接收数据:

    NioWorker.run()->nioworker. processSelectedKeys()->

Nioworker. Read()将从SocketChannel读取的数据封装成

ChannelBuffer ->发送upstream事件:fireMessageReceived(channel,buffer) –> 由注册到Pipeline中的Hanlder进行处理: EchoServerHandler. messageReceived(…)

 

    发送数据:

e.getChannel().write(e.getMessage());->Channels.write()->

发起downstream事件-> NioServerSocketPipelineSink. handleAcceptedSocket()将向外写的事件放入Channel中,然后通过NioWorker.writeFromUserCode()进行发送。

 

6:客户端:客户端的流程和服务器端类似。

 

 

总结:

1: Netty将操作封装成事件,比如: 发起连接时,产生connect的downstream事件。连接完毕后,产生upstream的connect事件。 

2:所有的事件都是放入Pipeline进行传送,传送的过程中可能被注册到pipeline中的Handler进行处理

3:在Pipeline传送完后,都必须都通ChannelSink进行处理。Sink默认处理了琐碎的操作,必须连接、读写等等。 

4:Channels:几乎所有的操作都能在这里找到,当然Channels一般是发送事件

5:NioWork: 处理IO事件的核心类,并承担了分发的责任。 

分享到:
评论

相关推荐

    NanguoCoffee 分析Netty工作流程

    本文将深入探讨Netty的工作流程,通过分析其核心组件和机制,帮助理解如何利用Netty构建高效的网络应用。 Netty 的工作流程主要基于Reactor模式,它包含以下几个关键组件: 1. **BossGroup**:BossGroup 负责接收...

    netty源码深入分析

    此外,《Netty源码深入分析》视频教程还涉及了许多其他高级特性,如零拷贝、内存池管理、自定义协议栈等,这些都是开发者在实际工作中可能会遇到的问题。希望通过对本课程的学习,大家能够对Netty有一个全面而深刻的...

    Netty4.x源码分析详解

    在分析 Netty 源码时,建议结合实际的网络通信场景,模拟各种网络事件,观察代码的执行流程,这有助于更好地理解和掌握 Netty 的工作原理。此外,阅读官方文档、参与社区讨论以及参考已有的源码分析文章也是学习的...

    learning-netty.zip

    - **源码分析篇**: 分析Netty关键组件的内部实现,如BossGroup、WorkerGroup的工作流程,以及EventLoop的调度机制。 - **实战篇**: 提供实际项目中使用Netty的案例,比如构建WebSocket服务器、HTTP服务器等。 - *...

    MINA2与Netty4比较分析

    接下来将根据标题和描述的要求详细分析Mina2与Netty4的区别,重点从它们的线程模型、Buffer使用以及Netty4中集成的序列化工具ProtoBuf等方面进行比较。 首先,Mina2和Netty4都是异步事件驱动的网络应用框架。Netty4...

    netty权威指南源码李林峰

    在理论方面,讲解了Netty的逻辑架构模型和核心类库的设计原理,而且对Netty在大数据、互联网、游戏行业的应用进行了深入分析;实战方面,从第一个Netty入门程序到私有协议栈的设计和开发,通过实际例程,由浅入深地...

    Netty权威指南-Netty源码

    源码分析时,首先需要关注的是 Netty 的启动流程,这通常从 `ServerBootstrap` 类开始。ServerBootstrap 配置了 EventLoopGroup(包含多个 EventLoop)和 Channel 实例,如 NioServerSocketChannel。然后通过绑定...

    netty-netty-4.1.19.Final.zip_netty_netty学习_rocketmq

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在深入探讨Netty与RocketMQ的关联之前,我们先来详细了解一下Netty的基本概念和核心特性。 Netty的核心设计...

    Netty权威指南完整版高清pdf

    Netty是Java领域的一款开源、异步事件驱动的网络应用程序框架,广泛应用于高性能服务器和客户端的构建,如聊天服务器、游戏服务器、流媒体服务等。 该书首先介绍了Netty的基本概念,包括其设计理念、核心组件以及与...

    netty 实现长连接

    Netty是一个高性能、异步事件驱动的网络应用程序框架,适用于开发服务器和客户端的高性能、高可用性协议库。在传统的HTTP或WebSocket等协议中,每次请求都是一个短连接,而长连接则允许客户端和服务器之间保持持续的...

    netty-4.1.4-jar包

    源代码分析有助于开发者更有效地利用Netty的特性,解决在实际项目中遇到的问题,或者根据需求定制特定功能。 Netty的核心概念包括: 1. **Channel**:它是网络连接的抽象,可以代表TCP连接、UDP套接字或任何其他...

    Netty入门教程文档

    ETL(Extract、Transform、Load)是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。 ETL是BI项目重要的一个...

    NIO+Netty5视频教程与Netty源码剖析视频教程

    Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。通过源码剖析,学习者将了解Netty如何利用Java NIO库实现高效的I/O操作,包括Channel、EventLoop、Handler、...

    以netty4.1源码中的EchoServer为例对netty的源码进行分析.docx

    在本文中,我们将深入分析 Netty 4.1 源码中的 EchoServer 示例,以理解其核心组件和工作原理。 首先,我们关注 EchoServer 服务端的初始化,这涉及到两个关键组件:`bossGroup` 和 `workerGroup`。它们都是 `...

    Netty-入门Netty编码

    通过阅读源码,我们可以更好地理解其内部工作原理,例如事件的处理流程、I/O 操作的优化以及内存管理策略。 至于“工具”,Netty 可以与其他开发工具和库无缝集成,例如日志框架、测试工具等。例如,我们可以使用 ...

    netty实战教程、netty代码demo

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个实战教程和代码示例是为那些希望深入理解并运用 Netty 的开发者准备的。以下是对 Netty 的详细介绍以及...

    93个netty高并发教学视频下载.txt

    05_Netty执行流程分析与重要组件介绍;06_Netty回调与Channel执行流程分析;07_Netty的Socket编程详解;08_Netty多客户端连接与通信,09_Netty读写检测机制与长连接要素,10_Netty对WebSocket的支援;11_Netty实现...

Global site tag (gtag.js) - Google Analytics