Netty in Action:Netty 的组件和设计

本文翻译自《Netty in Action》第三章  

本章包含

Netty的技术和架构方面

Channel,EventLoop和ChannelFuture

ChannelHandler和ChannelPipeline

Bootstrapping

在第一章我们总结了Java高效能网络编程的历史和技术基础,这为概述Netty的核心概念和构造模块提供了一个背景。

在第二章我们把讨论范围扩展到应用开发。通过创建一个简单的客户端和服务器你学到了bootstrapping,获得了一些亲自实践核心ChannelHandler API的经验。与此同时,你也验证了你的开发工具是可以正常工作的。

以这些内容为基础,在本书剩下的部分,我们会从两个不同但是密切联系的角度来研究Netty:做为一个类库和做为一个框架。这两个方面对用如何Netty开发高效,可重用,可维护的代码都很关键。

从一个高层次的角度来看,Netty解决了两个相应领域的问题,我们可以大体上称其为技术上的(technical)和结构上的(architectural)。首先,它的异步和事件驱动基于Java NIO实现,在高负载下能保证最好的应用性能和可扩展性。第二,Netty包含了一系列用来解耦应用逻辑和网络层的设计模式,简化了开发的同时最大限度地提升了可测试性,模块化和可重用性。

随着我们更具体地学习Netty的单个组件,我们将会密切关注这些组件是如何配合来支持结构的最佳实践(best practices)。遵循同样的原则,我们就能收获Netty提供的所有好处。在这个目标的指引下,在这一章,我们会回顾下到目前为止我们已经介绍过的Netty主要概念和组件。

3.1 Channel,EventLoop和ChannelFuture

下面几个小节会对我们讨论的Channel,EventLoop和ChannelFuture类增加一些细节,它们合起来可以被看成是Netty的网络抽象(Networking abstraction):

- Channel—Sockets

- EventLoop—控制流,多线程,并发

- ChannelFuture—异步通知

3.1.1 接口Channel

基本的I/O操作(bind(),connect(),read()和write())依赖于底层网络传输层提供的基本类型(primitives)。在基于Java的网络编程中,基本的构造单元就是Socket类。Netty的Channel接口提供了一个API,极大地降低了直接使用Socket的复杂性。另外,Channel是一个包含大量预定义,有专门用途的类层次结构(class hierarchy)中的根元素,下面只是列出了其中的一些部分:

- EmbeddedChannel

- LocalServerChannel

- NioDatagramChannel

- NioSctpChannel

- NioSocketChannel

3.1.2 接口EventLoop

EventLoop定义了Netty的核心抽象,用来处理发生在一个连接生命周期中的event。我们会在第七章讲Netty的线程模型时详细讨论EventLoop。现在,图3.1从高层次展现了Channel,EventLoop,Thread和EventLoopGroup之间的关系。

这些关系是指:

- 一个EventLoopGroup包含一个或者多个EventLoop

- 所有的EventLoop在它的整个生命周期里都绑定在一个线程上

- 所有被一个EventLoop处理的event都是由EventLoop绑定的线程处理的

- 一个Channel在它的生命周期内只注册到一个EventLoop上

- 一个EventLoop可以被分配给一个或者多个Channel。

图3.1 Channels,EventLoops和EventLoopGroups

This chapter requires login to view full content. You are viewing a preview.

Login to View Full Content

Course Curriculum

3

框架与 I/O:Spring、Netty 与 Web 容器

理解 Spring Boot 自动装配、AOP 与事务原理,掌握 Netty Reactor 模型及 Tomcat 连接处理机制,构建高内聚、易扩展的应用服务层。
4

高性能中间件:消息、缓存与存储

熟练运用 MySQL 索引/事务、Redis 缓存策略、Kafka/RocketMQ 消息可靠性,以及 ZooKeeper 分布式协调,搭建稳定、解耦的分布式数据底座。
6

云原生:容器化、可观测性与工程效能

通过 Docker/K8s 实现弹性部署,集成 Metrics/Logs/Traces 构建可观测体系,推动 DevOps 与自动化,让架构在云上持续交付与进化。