Netty In Action体系结构

99 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情

Netty In Action体系结构

一、Netty概念与体系结构

1.netty异步与实践驱动 1.1Jaa网络编程 Java NIO Selector

1.2 异步与事件驱动 多路复用

1.3 netty核心组件 1、Channel: 开放连接,对应一个请求 2、回调: channelActive(ChannelHandlerContext ctx) 3、Future :异步结果占位符,完成时返回 4、事件和ChannelHandler: Netty通过不同的事件通知我们事件的改变或操作的状态。 每个事件都可以转发给ChannelHandler类中某个用户实现方法,这是一个很好地事件驱动范式直接转发为应用程序构建块 Netty 的 ChannelHandler 为处理器提供了基本的抽象,提供了大量预定义的可以开箱即用的 ChannelHandler 实现(Http、SSL/TSL),ChannelHandler 自己也使用了事件和 Future,使得它们也成为了你的应用程序将使用的相同抽象的消费者. 5、组合channel、future、Channelhandler、事件 1)Future、回调和 ChannelHandler Netty的异步编程模型是建立在Future和回调的概念之上的,而将事件派发到ChannelHandler 的方法则发生在更深的层次上。结合在一起,这些元素就提供了一个处理环境,使你的应用程序逻 辑可以独立于任何网络操作相关的顾虑而独立地演变。这也是 Netty 的设计方式的一个关键目标。 拦截操作以及高速地转换入站数据和出站数据,都只需要你提供回调或者利用操作所返回的 Future。这使得链接操作变得既简单又高效,并且促进了可重用的通用代码的编写。 2)选择器、事件和 EventLoop 在这里插入图片描述

2.netty的组件与设计 2.1Channel、EventLoop、ChannelFuture 2.2ChannelHandler、ChannelPipeline 在这里插入图片描述

3、传输 基于事件驱动的多路复用 在这里插入图片描述 ChannelPipeline 持有所有将应用于入站和出站数据以及事件的 ChannelHandler 实 例,这些 ChannelHandler 实现了应用程序用于处理状态变化以及数据处理的逻辑

3.1内置传输 1、NIO NIO 提供了一个所有 I/O 操作的全异步的实现.它利用了自 NIO 子系统被引入 JDK 1.4 时便 可用的基于选择器的 API。 选择器背后的基本概念是充当一个注册表,在那里你将可以请求在 Channel 的状态发生变 化时得到通知 注册器功能 Selector与Zero-copy 基于Epoll的多路复用机制 括epoll——一个高度可扩展的I/O事件通知特性。Netty为Linux提供了一组NIO API,其以一种和它本身的设计更加一致的方式使用epoll,并且以一种更加轻量的方式使用中断。在高负载下它的性能要优于JDK的NIO实现。

4.ByteBuf 5、ChannelHandlerContext与ChannelPipeline 6、EventLoop与线程模型 7、引导(Bootstrap) 8、单元测试 第二部分 编解码器 编解码器框架 序列化与反序列化,ByteBuf读取Byte

内置编解码器 ProtoBufEncoder/Decoder

开箱即用协议 HTTP/HTTPS SSL/TSL

第三部分 网络协议 WebSocket(基于http通信升级) 基于SSL/TSL加密 基于AES的对称加密

UDP广播 应用案例分析 直接基于netty构建服务 Droplr:文件上传服务 FireBase:实时同步内容到不同类型终端上 websocket 长轮询

基于netty做封装组成新组件 Thrift java thrift 优化为基于netty的 nifty

Fingle 基于netty组装处理ssl/stats/codec,后转发给对应Fingle Server