摘要:支持很多协议,并且提供用于数据处理的容器。我们已经知道由特定事件触发。可专用于几乎所有的动作,包括将一个对象转为字节或相反,执行过程中抛出的异常处理。提供了一个容器给链并提供了一个用于管理沿着链入站和出站事件的流动。子类通过进行注册。
前两天写了一点netty相关的知识,并写了一个demo,但是对其原理还是没有深入,今天我们来做一次研究吧
首先让我们来认识一下netty的几个核心人物吧
BOOTSTRAPNetty 应用程序通过设置 bootstrap(引导)类的开始,该类提供了一个 用于应用程序网络层配置的容器。
ServerChannel实现负责创建子 Channel,它代表接受连接
在调用 bind() 或 connect() 之后,Bootstrap 类负责创建管道给客户或应用程序,
CHANNEL底层网络传输 API 必须提供给应用 I/O操作的接口,如读,写,连接,绑定等等。对于我们来说,这层结构几乎总是会成为一个“socket”。 Netty 中的接口 Channel 定义了与 socket 丰富交互的操作集:bind, close, config, connect, isActive, isOpen, isWritable, read, write 等等。 Netty 提供大量的 Channel 实现来专门使用。这些包括 AbstractChannel,AbstractNioByteChannel,AbstractNioChannel,EmbeddedChannel, LocalServerChannel,NioSocketChannel 等等。
CHANNELHANDLERChannelHandler支持很多协议,并且提供用于数据处理的容器。我们已经知道 ChannelHandler 由特定事件触发。 ChannelHandler 可专用于几乎所有的动作,包括将一个对象转为字节(或相反),执行过程中抛出的异常处理。
常用的一个接口是 ChannelInboundHandler,这个类型接收到入站事件(包括接收到的数据)可以处理应用程序逻辑。当你需要提供响应时,你也可以从 ChannelInboundHandler 冲刷数据。一句话,业务逻辑经常存活于一个或者多个 ChannelInboundHandler。
ChannelPipeline 提供了一个容器给 ChannelHandler 链并提供了一个API 用于管理沿着链入站和出站事件的流动。每个 Channel 都有自己的ChannelPipeline,当 Channel 创建时自动创建的。 ChannelHandler 是如何安装在 ChannelPipeline? 主要是实现了ChannelHandler 的抽象 ChannelInitializer。ChannelInitializer子类 通过 ServerBootstrap 进行注册。当它的方法 initChannel() 被调用时,这个对象将安装自定义的 ChannelHandler 集到 pipeline。当这个操作完成时,ChannelInitializer 子类则 从 ChannelPipeline 自动删除自身。
1.Channel 绑定到 ChannelPipeline
2.ChannelPipeline 绑定到 包含 ChannelHandler 的 Channel
3.ChannelHandler
4.当添加 ChannelHandler 到 ChannelPipeline 时,ChannelHandlerContext 被创建
EventLoop 用于处理 Channel 的 I/O 操作。一个单一的 EventLoop通常会处理多个 Channel 事件。一个 EventLoopGroup 可以含有多于一个的 EventLoop 和 提供了一种迭代用于检索清单中的下一个。
简单点来说,EventLoopGroup 是一个线程池,EventLoop是其中一个线程
但netty并不仅限于此
一旦 Channel 是分配给一个 EventLoop,它将使用这个 EventLoop 在它的生命周期里和同样的线程。你可以,也应该,依靠这个,因为它可以确保你不需要担心同步(包括线程安全、可见性和同步)在你 ChannelHandler实现。
Netty 所有的 I/O 操作都是异步。因为一个操作可能无法立即返回,我们需要有一种方法在以后确定它的结果。出于这个目的,Netty 提供了接口 ChannelFuture,它的 addListener 方法注册了一个 ChannelFutureListener ,当操作完成时,可以被通知(不管成功与否)。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/66351.html
摘要:是一个高性能事件驱动的异步的非堵塞的框架,用于建立等底层的连接,基于可以建立高性能的服务器。在中提供了两套,一套是针对标准输入输出,另一套就是网络编程。和是标准中的核心对象是对原中流的模拟,任何来源和目的数据都必须通过一个对象。 Netty是一个高性能 事件驱动的异步的非堵塞的IO(NIO)框架,用于建立TCP等底层的连接,基于Netty可以建立高性能的Http服务器。1、首先来复习下...
摘要:前提好几周没更新博客了,对不断支持我博客的童鞋们说声抱歉了。熟悉我的人都知道我写博客的时间比较早,而且坚持的时间也比较久,一直到现在也是一直保持着更新状态。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好几周没更新博客了,对不断支持我博客的童鞋们说声:抱歉了!。自己这段时...
摘要:背景在工作中虽然我经常使用到库但是很多时候对的一些概念还是处于知其然不知其所以然的状态因此就萌生了学习源码的想法刚开始看源码的时候自然是比较痛苦的主要原因有两个第一网上没有找到让我满意的详尽的源码分析的教程第二我也是第一次系统地学习这么大代 背景 在工作中, 虽然我经常使用到 Netty 库, 但是很多时候对 Netty 的一些概念还是处于知其然, 不知其所以然的状态, 因此就萌生了学...
摘要:零前期准备文章异常啰嗦且绕弯。二是底层真正起作用的类,并且提供了大量的静态方法。在普通的线程中,这个对象由于本身没有的原生支持,所以只能附着在对象当中。同一个线程中如果创建多个对象,获取到的是同一个。 零 前期准备 0 FBI WARNING 文章异常啰嗦且绕弯。 1 版本 JDK 版本 : OpenJDK 11.0.1 IDE : idea 2018.3 Netty 版本 : net...
摘要:它使用了事件通知以确定在一组非阻塞套接字中有哪些已经就绪能够进行相关的操作。目前,可以把看作是传入入站或者传出出站数据的载体。出站事件是未来将会触发的某个动作的操作结果,这些动作包括打开或者关闭到远程节点的连接将数据写到或者冲刷到套接字。 netty的概念 定义 Netty 是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端。我们可以很简单的...
阅读 1205·2021-11-11 16:54
阅读 1717·2021-10-13 09:40
阅读 916·2021-10-08 10:05
阅读 3477·2021-09-22 15:50
阅读 3642·2021-09-22 15:41
阅读 1708·2021-09-22 15:08
阅读 2308·2021-09-07 10:24
阅读 3552·2019-08-30 12:52