Netty 框架学习 —— 单元测试】的更多相关文章

EmbeddedChannel 概述 ChannelHandler 是 Netty 程序的关键元素,所以彻底地测试它们应该是你的开发过程中的一个标准部分,EmbeddedChannel 是 Netty 专门为改进针对 ChannelHandler 的单元测试而提供的.Netty 提供了它所谓的 Embedded 传输,这个传输是 EmbeddedChannel 的功能,提供了通过 ChannelPipeline 传播事件的简便方法 这个方法是:将入站数据或者出站数据写入到 EmbeddedCha…
概述 前面我们学习了 ChannelPipeline.ChannelHandler 和 EventLoop 之后,接下来的问题是:如何将它们组织起来,成为一个可实际运行的应用程序呢?答案是使用引导(Bootstrap),引导一个应用程序是指对它进行配置,并使它运行起来的过程,也即是将所有的框架组件在后台组合起来并启用 Bootstrap 类 引导类的层次结构包含一个抽象父类和两个具体子类 如果将客户端和服务端视为两个应用程序,那么它们的功能是不一样的:服务端致力于使用一个父 Channel 来接…
编解码器 每个网络应用程序都必须定义如何解析在两个节点之间来回传输的原始字节,以及如何将其和目标应用程序的数据格式做相互转换.这种转换逻辑由编解码器处理,编解码器由编码器和解码器组成,它们每种都可以将字节流从一种格式转换为另一种格式 编码器将消息转换为适合于传输的格式(最有可能的就是字节流) 解码器则是将 网络字节流转换回应用程序的消息格式 因此,编码器操作出站数据,而解码器处理入站数据 1. 解码器 在这一节,我们将研究 Netty 所提供的解码器类,并提供关于何时以及如何使用它们的具体示例,…
概述 在本文,我们将编写一个基于 Netty 实现的客户端和服务端应用程序,相信通过学习该示例,一定能更全面的理解 Netty API 该图展示的是多个客户端同时连接到一台服务器.客户端建立一个连接后,会向服务器发送一个或多个消息,反过来,服务器又会将每个消息回送给客户端 编写 Echo 服务器 所有 Netty 服务器都需要以下两部分: 至少一个 CHannelHandler 该组件实现了服务器对从客户端接收的数据的处理,即它的业务逻辑 引导 配置服务器的启动代码,将服务器绑定到它要监听连接请…
EventLoop 接口 Netty 是基于 Java NIO 的,因此 Channel 也有其生命周期,处理一个连接在其生命周期内发生的事件是所有网络框架的基本功能.通常来说,我们使用一个线程来处理一个连接,该连接的生命周期的某一事件就绪,则会调用对应的事件处理逻辑 在 Netty 中,一个 EventLoop 负责处理一个 Channel 的生命周期事件.在代码设计上,EventLoop 间接实现了 JUC 中的 ExecutorService 和 ScheduleExecutorServi…
Netty 为许多提供了许多预置的编解码器和处理器,几乎可以开箱即用,减少了在烦琐事务上话费的时间和精力 空闲的连接和超时 检测空闲连接以及超时对于释放资源来说至关重要,Netty 特地为它提供了几个 ChannelHandler 实现 名称 描述 IdleStateHandler 当连接空闲时间太长时,将会触发一个 IdleStateEvent 事件,然后,你可以通过在 ChannelInboundHandler 重写 userEventTriggered() 方法来处理该 IdleState…
Channel.EventLoop 和 ChannelFuture 这一节将对 Channel.EventLoop 和 ChannelFuture 类进行讨论,它们组合在一起,可以被认为是 Netty 网络抽象的代表: Channel -- Socket EventLoop -- 控制流.多线程处理.并发 CHannelFuture -- 异步通知 1. Channel 接口 Netty 的 Channel 接口对应 Java 网络编程的 Socket,大大降低了直接使用 Socket 类的复杂…
概述 流经网络的数据总是具有相同的类型:字节,这些字节如何传输主要取决于我们所说的网络传输.用户并不关心传输的细节,只在乎字节是否被可靠地发送和接收 如果使用 Java 网络编程,你会发现,某些时候当你需要支持高并发连接,随后你尝试将阻塞传输切换为非阻塞传输,那么你会因为这两种 API 的截然不同而遇到问题.Netty 提供了一个通用的 API,这使得转换更加简单. 传统的传输方式 这里介绍仅使用 JDK API 来实现应用程序的阻塞(OIO)和非阻塞版本(NIO) 阻塞网络编程如下: publ…
概述 网络数据的基本单位总是字节,Java NIO 提供了 ByteBuffer 作为它的字节容器,但这个类的使用过于复杂.Netty 的 ByteBuf 具有卓越的功能性和灵活性,可以作为 ByteBuffer 的替代品 Netty 的数据处理 API 通过两个组件暴露 -- abstract class ByteBuf 和 interface ByteBufHolder,下面是 ByteBuf API 的优点: 可以被用户自定义的缓冲区类型扩展 通过内置的复合缓冲区类型实现透明的零拷贝 容量…
ChannelHandler 1. Channel 生命周期 Channel 的生命周期状态如下: 状态 描述 ChannelUnregistered Channel 已经被创建,但还未注册到 EventLoop ChannelRegistered Channel 已经被注册到 EventLoop ChannelActive Channel 处于活动状态(已经连接到它的远程节点),可以接收和发送数据 ChannelInactive Channel 没有连接到远程节点 Channel 的生命周期按…