netty

《Netty in Action》读书笔记

2016-06-12  本文已影响1385人  Jeff

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.

在看微博开源的rpc框架motan的过程中,了解到其使用了Netty构建客户和服务端,为了理解motan的源码于是找了Netty的相关书籍,其中之一就是《Netty In Action》,该书作者之一就是Netty的主力开发人员之一Norman Maurer。

书主要分为四个部分:

  1. Netty概念和架构:提供了简单点示例,介绍了组件及其设计和架构
  2. Codecs:详细介绍了编码和解码的实现
  3. 网络协议:WebSocket和UDP
  4. 案例研究:Droply, Firebase, Urban Airship, Nifty, Swift和Fiangle
Netty In Action

读完全书,对于Netty有了个基本的了解,可以尝试用其开发异步的网络服务例如企业自己的rpc框架,或者提供一些异步的高性能服务。

接下来把书中的内容做个梳理和介绍。

组件和架构

Netty组件包括如下几个类型:

A Channel is a basic construct of Java NIO, it represents an open connection to an entity such as a hardware device, a file, a network socket, or a program component that is capable of performing one or more distinct I/O operations, for example reading or writing.

https://en.wikipedia.org/wiki/Event_loop: the event loop, message dispatcher, message loop, message pump, or run loop is a programming construct that waits for and dispatches events or messages in a program.

Channels, EventLoops, and EventLoopGroups

一些功能

ByteBuf - Netty的数据容器

数据容器,用于数据的读写,ByteBuf有两种使用模式:堆缓冲区(HEAP BUFFERS:copy and write),直接缓冲(DIRECT BUFFER:zero copy)和组合缓冲(COMPOSITE BUFFERS: aggregate to avoid concating by copying multiple buffers),第一种在JVM的堆存储数据,第二种是在堆外存储,最后一种是在聚合多个不同的ByteBuff。Netty提供了allocator分配池化的ByteBuf以便更好的利用内存,同时也提供了非池化的实现。

编解码(Codec)

Codec组件包括encoder和decoder,是Netty的一个重要组成部分,用来做数据转换在网络传输和应用数据,重用比如有ByteToMessageDecoder,MessageToMessageDecoder,MessageToByteEncoder,MessageToMessageEncoder或ByteToMessageCodec和MessageToMessageCodec其同时包含decode和encode。Codec是pipeline的一部分,与其他handler一起顺序执行,例如对于输入的数据先decode然后送到后续的handler。

安全

传输和不同协议的支持

具体实现和案例

客户端实现注意事项

服务端实现注意事项

motan是一个很好的参看,架构清晰,代码模块化,简单明了和测试也比较全面。

参考

上一篇下一篇

猜你喜欢

热点阅读