序
以前開過品味性能系列、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算法