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