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算法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM