我和Netty的故事

青衫無名發表於2017-05-23

本文首發於InfoQ架構師雜誌。

還在上學的時候,我特別好奇QQ是怎麼實現的,為什麼我一發訊息我的好友馬上就能收到且基本沒有延遲,它的原理是什麼?大三的時候,我學習了Java語言,接觸到了Socket程式設計,不知天高地厚的我當時居然想自己實現個簡易QQ,和幾個朋友做了技術評估後覺得這個事好像不是那麼難,緊接著我們就用Swing以及一些Socket程式設計知識完成了一個簡易的區域網QQ,雖然功能不是那麼的穩定,但基本上還是可以實現私聊、群聊、檔案傳輸、抖屏功能。這也許是我第一次接觸網路通訊,核心功能部分使用了同步I/O的Socket類庫。

參加工作後,公司使用的RPC框架是Hessian,Hessian是一款基於HTTP協議的RPC框架,採用的是二進位制RPC協議,但是在Java中,Hessian的服務端需要使用Tomcat之類的容器,而它們的效能總是那麼的不如人意。因為那會公司使用的MVC框架是Play,所以我很早就接觸到了Netty,它的高效能、高可靠性的特性早有耳聞。看了Play框架中Netty部分的程式碼以及Netty的官方案例後,我用Netty重新實現了Hessian的服務端,於是一款構建於Netty和Hessian基礎上的高效能的RPC框架誕生了,我取名叫Hetty(Hessian+Netty)。簡單的效能測試之後,我發現Hetty的效能是之前的4~5倍,這次之後,我對Netty有了更深入的瞭解,使用Netty可以更簡單的開發出高效能、可擴充套件、易讀易維護的系統。

再到後來,我去了一家遊戲公司,發現他們在伺服器端大量使用了Netty框架,從來沒有想到Netty在遊戲行業已經得到了這麼大範圍的使用。不過再仔細想想,這一點都不驚奇,遊戲伺服器端,除了大量的業務邏輯外,其它部分其實都在玩NIO,而Netty作為一款成熟的非同步NIO通訊框架,它的效能、擴充套件性、穩定性、使用難度都得到了業界的肯定。那Netty有哪些優點了?我認為有以下幾點:

  1. 文件齊全,社群活躍,API簡單,案例很多。
  2. 支援多種協議,如HTTP、FTP、SMTP。
  3. 效能高,易擴充套件。
  4. 週期性的版本迭代,成熟且穩定。

這麼一看,工作生活中處處與Netty為伴,其實是Netty見證了我的成長,希望好的框架能讓更多的人收益!


相關文章