Netty は、高性能の非同期イベント駆動型 NIO フレームワークであり、Netty のすべての IO 操作は非同期であり、Future-Listener メカニズムを通じてプロアクティブに実行できます。通知メカニズムを通じて IO 操作の結果を取得または取得します。
![](https://img.php.cn/upload/article/000/000/001/04322a2782ba3866113ff5f21455f1ed-0.png)
Netty の利点は、
a、豊富な機能、組み込みの複数のデータのエンコードおよびデコード機能、および複数のネットワーク プロトコルのサポートです。
b. 高いパフォーマンス。他の主流の NIO ネットワーク フレームワークと比較して、最高の全体的なパフォーマンスを備えています。
c. 拡張性に優れ、提供する ChannelHandler コンポーネントを通じてネットワーク通信を柔軟に拡張できます。
d、使いやすさ、使いやすい API。
e. 多くの商用アプリケーションのテストに合格し、インターネット、オンライン ゲーム、ビッグデータ、通信ソフトウェアなどの多くの業界で商用化に成功しています。
Netty は、典型的な 3 層ネットワーク アーキテクチャを設計に採用しています。論理アーキテクチャ図は次のとおりです。
![](https://img.php.cn/upload/article/000/000/001/24c29ffbf33ca0c93022d7b313e013b7-1.png)
最初の層: Reactor 通信スケジューリング層。この層の主な役割は、ネットワーク接続と読み取りおよび書き込み操作を監視することです。また、ネットワーク層データをメモリ バッファに読み取り、接続の作成、接続のアクティブ化、読み取りイベント、書き込みイベントなどのさまざまなネットワーク イベントをトリガーする役割を担います。これらのイベントをパイプラインにトリガーすると、パイプラインは後続の処理に対する一連の責任として機能します。
2 番目の層: 責任チェーン パイプライン層。責任チェーン内のイベントの秩序ある前方 (後方) 伝播を担当し、責任チェーンの動的なオーケストレーションも担当します。パイプラインは、関心のあるイベントをリッスンして処理することを選択できます。
3 番目の層: ビジネス ロジック処理層。一般に、次の 2 つのカテゴリに分類できます。 a. ログや注文処理などの純粋なビジネス ロジック処理。 b. HTTP(S) プロトコル、FTP プロトコルなどのアプリケーション層プロトコル管理。
ネットワーク サービスの通信パフォーマンスに影響を与える主な要因は、ネットワーク I/O モデル、スレッド (プロセス) スケジューリング モデル、データのシリアル化方法であることは誰もが知っています。
ネットワーク I/O モデルに関して、Netty はノンブロッキング I/O に基づく実装を採用しており、基礎となる層は JDKNIO フレームワークのセレクターに依存しています。
スレッド スケジューリング モデルに関しては、Netty は Reactor スレッド モデルを採用しています。一般的に使用される Reactor スレッド モデルは 3 つあります。つまり、
a、Reactor シングルスレッド モデル: Reactor シングルスレッド モデルは、すべての I/O 操作が同じ NIO スレッドで完了することを意味します。一部の小容量アプリケーション シナリオでは、シングルスレッド モデルを使用できます。
b. Reactor マルチスレッド モデル: Rector マルチスレッド モデルとシングルスレッド モデルの最大の違いは、I/O 操作を処理する一連の NIO スレッドがあることです。主に、同時実行性が高く、ビジネス量が多いシナリオで使用されます。
c. マスター/スレーブ Reactor マルチスレッド モデル: マスター/スレーブ Reactor スレッド モデルの特徴は、サーバーがクライアント接続を受信するための個別の NIO スレッドではなく、独立した NIO スレッド プールであることです。マスター/スレーブ NIO スレッド モデルを使用すると、すべてのクライアント接続を効果的に処理できないサーバー側のリスニング スレッドのパフォーマンスが不十分であるという問題を解決できます。 Netty スレッド モデルは固定されておらず、3 つの Reactor スレッド モデルをサポートできます。
データのシリアル化に関して、シリアル化のパフォーマンスに影響を与える主な要因は次のとおりです:
a. シリアル化後のコード ストリームのサイズ (ネットワーク帯域幅の占有)。
b. シリアル化および逆シリアル化操作のパフォーマンス (CPU リソース使用量)。
c. 同時通話時のパフォーマンス: 安定性、直線的な成長など。
Netty はデフォルトで GoogleProtobuf バイナリ シリアル化フレームワークのサポートを提供しますが、Netty のエンコードおよびデコード インターフェイスを拡張することで、Avro や Thrift の圧縮バイナリ エンコードおよびデコード フレームワークなど、他の高性能シリアル化フレームワークを実装できます。
以上がNIO に基づく Netty ネットワーク フレームワーク (詳細な画像とテキストの説明)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。