Netty學習路線總結
Netty學習路線總結
序
之前開過品味效能系列、Mysql學習系列,頗為曲高和寡。都是講理論,很少有手把手深入淺出的文章。不過確實我就這脾氣,文雅點的說法叫做“偽雅”,下里巴人叫做“裝逼”。
學習資料
本篇文章,打算總結下學習過程,分析學習要點。
關於netty的資料頗多,學習起來未免雜亂。對於初學者麻煩點在於難以找到重點,再此則推薦一個學習路線。
- Netty 實戰(精髓)
- Netty權威指南
- 通訊理論學習,akka bio nio aio(可以繞過)
第一步 上手練習
Telnet示例(15分鐘)
官方示例TelnetClient
推薦這個示例是因為它足夠簡單,簡單到客戶端也沒有。
進階示例(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/5dcbc0456376
第二步 熟悉元件
對於從零開始,想要快速上手的同學來說。只想說直接給一份程式碼,從安全形度出發也不敢用到生產環境。出了問題也無從下手修改。
一些實用元件推薦,請務必熟悉它們的作用。
跟著Netty 實戰(精髓),看《Netty 總覽》
- 學習步驟如下:
- 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演算法