2020/1/12

Netty 介紹(一)


  • 資料來源
  • Netty是一個異步的、事件驅動的NIO FrameWork , 用以開發高性能高可用的網路IO程序
  • 主要針對TCP協議下(UDP也可) , 面向Client端的高併發應用, 因為其為NIO封裝,所以需先了解JAVA NIO API
  • 包含在微服務RPC框架、遊戲產業、大數據產業皆可使用
  • BIO、NIO、AIO比較
    • BIO同步阻塞
      • 到理髮店等待理髮師輪到自己
      • Client每次連接皆新增線呈
      • 串流的accept()、read()、write皆會造成網路延遲
      • InputStream、OutputStream僅可單向
    • NIO同步非阻塞
      • 到理髮店發現排隊人多,請理髮師通知,自行先處理其他事情
      • 一個線呈處理多個Client連接,多路復用
      • 使用輪循機制等待channel事件發生,即資料到達才處理
      • 三大元件: Selector、Channel、Buffer
      • Selector會事件監聽器 , 每次處理完需刪除selectkey
      • Channle可雙向讀寫 , 須額外開啟非阻塞
      • Buffer讀寫用資料塊, flip()進行讀寫切換(position和limit刷新) , clear()進行整個刷新

    • AIO異步非阻塞
      • 打電話叫理髮師到家裡剪髮,自己先處理其他事情
      • 前端例子:異步AJAX,因HTTP1.1提共的長連線特性,不必等待Server回應
      • 後端例子:Spring 5 WebFluxu也提共了異步編程 , 當後端被呼叫時 , 後端並不會新起線程,而是透過後端的線程池進行處理
    • 零拷貝
      • 減少內存拷貝次數有助提升性能
      • 所謂零拷貝指的是減少CPU COPY,無須從kernel buffer拷貝到socket buffer





沒有留言:

張貼留言

test2