序
以前开过品味性能系列、Mysql学习系列,颇为曲高和寡。都是讲理论,不多有手把手深刻浅出的文章。不过确实我就这脾气,文雅点的说法叫作“伪雅”,下里巴人叫作“装逼”。
学习资料
本篇文章,打算总结下学习过程,分析学习要点。github
关于netty的资料颇多,学习起来未免杂乱。对于初学者麻烦点在于难以找到重点,再此则推荐一个学习路线。算法
- Netty 实战(精髓)
- Netty权威指南
- 通讯理论学习,akka bio nio aio(能够绕过)
第一步 上手练习
Telnet示例(15分钟)
使用Netty建立Telnet服务
官方示例TelnetClientsql
推荐这个示例是由于它足够简单,简单到客户端也没有。
进阶示例(30分钟)
《Netty 实战(精髓》->第一个netty应用)安全
在这一章可以学习到更多细节。
- 服务端 (serverChannel)
- EchoServerHandler 简单的接收打印,将所接收的消息返回给发送者
- 冲刷全部待审消息到远程节点
- 关闭通道后,操做完成
经过这几步代码,学习 Netty 组件模型的基础 -> ChannelHandler ,它是重中之重。在稍后的第二步将会深刻讲解。服务器
- 服务端 (server)
- EchoServer 建立EventLoopGroup、ServerBootstrap
- 指定 Channel
- 设置 socket 地址使用所选的端口
- 添加 EchoServerHandler 到 Channel 的 ChannelPipeline
- 绑定的服务器;sync 等待服务器关闭
- 关闭 channel 和 块,直到它被关闭
- 关机的 EventLoopGroup,释放全部资源
- 客户端 (client) -> Bootstrap的构建过程
http://www.jianshu.com/p/5dcbc0456376markdown
第二步 熟悉组件
对于从零开始,想要快速上手的同窗来讲。只想说直接给一份代码,从安全角度出发也不敢用到生产环境。出了问题也无从下手修改。session
一些实用组件推荐,请务必熟悉它们的做用。
跟着Netty 实战(精髓),看《Netty 总览》app
- 学习步骤以下:
- Channel、ChannelHandler
- Encode、Decode、ByteBuf
- ChannelHandlerContext
- ReferenceCountUtil
- ChannelFuture、Promise
- ChannelPipeline、ChannelInitializer
- EventLoop、EventLoopGroup
- Attributekey
-
CharsetUtil
尽可能,按照其在整个通讯过程当中所属顺位,讲解全部 Netty 主要组件。大体结构图以下:
1.Channel、ChannelHandler
熟悉ChannelInboundHandlerAdapter 抽象类里面每一个方法的用处。
利用责任单一原则,把消息
2.Encode、Decode、ByteBuf
-
Encode、Decode
-
ByteBuf
(ByteBuf和相关辅助类)[http://www.cnblogs.com/wade-luffy/p/6196481.html]
(WroldClock)[https://netty.io/4.0/xref/io/netty/example/worldclock/WorldClockServerHandler.html]
第三步 难点、要点
- EventLoop 数量、名称
- 粘包、半包
- 心跳 3次
- 重连
- session
- 不想转关键字
- 内存保护、溢出oom
- 链接数与释放
- 拒绝链接、黑名单、白名单
- Nginx
- fail over重试与幂等性
第四步 高阶原理
对于已经在项目中应用了 netty 的同窗,更多的想学习源码,可是并不推荐直接看源码。
由于经常在没有必定设计功底的状况下,会看的不明因此。
- ByteBuf
- Channel 和Unsafe
- ChannelPipeline 和ChannelHandler
- EventLoop 和EventLoopGroup
- Future 和Promise
总结
更多协议类型支持,请自行根据需求搜索相应资料。
在经过github搜索相应源码参考学习时,切记分辨出事netty3.x与netty4.+版本。由于改动很大,不少资料已经没有参考价值。
分布式服务
- 幂等性
- fail over、fail fast、fail safe、fail back
- 分布式事务
- cas原子锁
- zookeeper与paxos算法