1. 程式人生 > >Netty學習路線總結

Netty學習路線總結

Netty學習路線總結

之前開過品味效能系列、Mysql學習系列,頗為曲高和寡。都是講理論,很少有手把手深入淺出的文章。不過確實我就這脾氣,文雅點的說法叫做“偽雅”,下里巴人叫做“裝逼”。

學習資料

本篇文章,打算總結下學習過程,分析學習要點。

關於netty的資料頗多,學習起來未免雜亂。對於初學者麻煩點在於難以找到重點,再此則推薦一個學習路線。

第一步 上手練習

Telnet示例(15分鐘)

使用Netty建立Telnet服務


官方示例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 總覽

  • 學習步驟如下:
  1. Channel、ChannelHandler
  2. Encode、Decode、ByteBuf
  3. ChannelHandlerContext
  4. ReferenceCountUtil
  5. ChannelFuture、Promise
  6. ChannelPipeline、ChannelInitializer
  7. EventLoop、EventLoopGroup
  8. Attributekey
  9. CharsetUtil

    儘量,按照其在整個通訊過程中所屬順位,講解所有 Netty 主要元件。大致結構圖如下:

1.Channel、ChannelHandler

熟悉ChannelInboundHandlerAdapter 抽象類裡面每個方法的用處。

利用責任單一原則,把訊息

2.Encode、Decode、ByteBuf

第三步 難點、要點

  1. EventLoop 數量、名稱
  2. 粘包、半包
  3. 心跳 3次
  4. 重連
  5. session
  6. 不想轉關鍵字
  7. 記憶體保護、溢位oom
  8. 連線數與釋放
  9. 拒絕連線、黑名單、白名單
  10. Nginx
  11. fail over重試與冪等性

第四步 高階原理

對於已經在專案中應用了 netty 的同學,更多的想學習原始碼,但是並不推薦直接看原始碼。
因為常常在沒有一定設計功底的情況下,會看的不明所以。

  1. ByteBuf
  2. Channel 和Unsafe
  3. ChannelPipeline 和ChannelHandler
  4. EventLoop 和EventLoopGroup
  5. Future 和Promise

總結

更多協議型別支援,請自行根據需求搜尋相應資料。

在通過github搜尋相應原始碼參考學習時,切記分辨出事netty3.x與netty4.+版本。因為改動很大,很多資料已經沒有參考價值。

分散式服務

  • 冪等性
  • fail over、fail fast、fail safe、fail back
  • 分散式事務
  • cas原子鎖
  • zookeeper與paxos演算法