閱讀855 返回首頁    go 阿裏雲 go 技術社區[雲棲]


我和Netty的故事

本文首發於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見證了我的成長,希望好的框架能讓更多的人收益!

最後更新:2017-05-23 17:03:47

  上一篇:go  Java設計模式:觀察者
  下一篇:go  JAVA 9 新特性