Netty與JDK自帶NIO的使用對比

Netty與JDK自帶NIO的使用對比

開發高質量的NIO程序並非一件簡單的事情,出去NIO固有的複雜性和BUG不談,做爲NIO服務端,須要可以處理網絡的閃斷、客戶端的重複接入、客戶端的安全認證、消息的編解碼、半包讀寫等狀況,若是你沒有足夠的NIO編程經驗積累,一個NIO框架的穩定性每每須要半年甚至更長的時間。更爲糟糕的是,一旦在生產環境中發生問題,每每會致使跨節點的服務調用中斷,嚴重的可能會致使整個集羣環境都不可用,須要重啓服務器,這種非正常的停機會帶來巨大的損失編程

不選擇Java原生NIO編程的緣由

  • NIO的類庫和API繁雜,使用麻煩,你須要熟練掌握Selector,ServerSocketChannel、SocketChannel、ByteBuffer等。
  • 須要具有其餘的額外技能作鋪墊,例如熟悉Java多線程編程。這是由於NIO編程涉及到Reactor模式,你必須對多線程和網絡編程很是熟悉,才能寫出高質量的NIO程序。
  • 可靠性能力補齊,工做量和難度很是大。例如客戶端面臨斷連重連、網絡閃斷、半包讀寫、失敗緩存、網絡擁塞和異常碼流的處理等問題,NIO編程的特色是功能開發相對容易,可是可靠性能力補齊的工做量和難度都很是大。
  • JDK NIO的BUG,例如epoll bug,它會致使Selector空輪詢,最終致使CPU 100%。官方驗證例子 基於以上緣由,在大多數場景下,不建議直接使用JDK的NIO類庫,除非你精通NIO編程或者有特殊的需求。在絕大多數的業務場景中,咱們可使用NIO框架Netty來進行NIO編程,它既能夠做爲客戶端也能夠做爲服務端,同時支持UDP和異步文件傳輸,功能很是強大。

爲何選擇Netty

使用Netty的有點能夠總結以下:緩存

  • API使用簡單,開發門檻低
  • 功能強大,預置了多種編解碼功能,支持多種主流協議
  • 定製能力強,能夠經過ChannelHandler對通訊框架進行靈活地擴展
  • 性能高,經過與其餘業界主流的NIO框架對比,Netty的綜合性能最優
  • 成熟、穩定,Netty修復了已經發現的全部JDK NIO BUG,業務開發人員不須要再爲NIO的BUG而煩惱
  • 社區活躍,版本迭代週期短,發現的BUG能夠被及時修復,同時,更多的新功能會加入
  • 經歷了大規模的商業應用考驗,質量獲得驗證。在互聯網、大數據、網絡遊戲、企業應用、電信軟件等衆多行業獲得成功商用,證實了它已經徹底可以知足不一樣行業的商業應用了。
相關文章
相關標籤/搜索