天天看點

[netty]-概述1. 概述2. netty整體設計

1. 概述

Netty 是由JBOSS 提供的一個Java 開源架構。Netty 提供異步的、基于事件驅動的網絡應用程式架構,用以快速開發高性能、高可靠性的網絡IO 程式。

Netty 是一個基于NIO 的網絡程式設計架構,使用Netty 可以幫助你快速、簡單的開發出一個網絡應用,相當于簡化和流程化了NIO 的開發過程。作為目前最流行的NIO 架構,Netty 在網際網路領域、大資料分布式計算領域、遊戲行業、通信行業等獲得了廣泛的應用,知名的Elasticsearch 、Dubbo 架構内部都采用了Netty。

[netty]-概述1. 概述2. netty整體設計

image.png

2. netty整體設計

2.1 線程模型

單線程模型

伺服器端用一個線程通過多路複用搞定所有的IO 操作(包括連接配接,讀、寫等),編碼簡單,清晰明了,但是如果用戶端連接配接數量較多,将無法支撐,咱們前面的NIO 案例就屬于這種模型。

[netty]-概述1. 概述2. netty整體設計

image.png

線程池模型

伺服器端采用一個線程專門處理用戶端連接配接請求,采用一個線程池負責IO 操作。在絕大多數場景下,該模型都能滿足使用。

[netty]-概述1. 概述2. netty整體設計

image.png

Netty模型

[netty]-概述1. 概述2. netty整體設計

image.png

比較類似于上面的線程池模型,Netty 抽象出兩組線程池,BossGroup 專門負責接收用戶端連接配接,WorkerGroup 專門負責網絡讀寫操作。NioEventLoop 表示一個不斷循環執行處理任務的線程,每個NioEventLoop 都有一個selector,用于監聽綁定在其上的socket 網絡通道。NioEventLoop 内部采用串行化設計,從消息的讀取->解碼->處理->編碼->發送,始終由IO 線程NioEventLoop 負責。

  • 一個NioEventLoopGroup 下包含多個NioEventLoop
  • 每個NioEventLoop 中包含有一個Selector,一個taskQueue
  • 每個NioEventLoop 的Selector 上可以注冊監聽多個NioChannel
  • 每個NioChannel 隻會綁定在唯一的NioEventLoop 上
  • 每個NioChannel 都綁定有一個自己的ChannelPipeline

2.2 異步模型

FUTURE, CALLBACK 和HANDLER

[netty]-概述1. 概述2. netty整體設計

image.png

Netty 的異步模型是建立在future 和callback 的之上的。callback 大家都比較熟悉了,這裡重點說說Future,它的核心思想是:假設一個方法fun,計算過程可能非常耗時,等待fun傳回顯然不合适。那麼可以在調用fun 的時候,立馬傳回一個Future,後續可以通過Future去監控方法fun 的處理過程。在使用Netty 進行程式設計時,攔截操作和轉換出入站資料隻需要您提供callback 或利用future 即可。這使得鍊式操作簡單、高效, 并有利于編寫可重用的、通用的代碼。Netty 架構的目标就是讓你的業務邏輯從網絡基礎應用編碼中分離出來、解脫出來。