Nettyコアコンポーネント
- ネットワーク通信層: この層には、Bootstrap、ServerBootStrap、Channel という 3 つのコア コンポーネントがあります。Bootstrap はクライアントの起動を担当し、リモート Netty サーバーにリンクするために使用されます。ServerBootStrap はサーバーの監視を担当し、指定されたポートを監視するために使用されます。Channel はネットワーク通信を完了するためのキャリアに相当します。
- イベント スケジューリング レイヤー: このレイヤーには、EventLoopGroup と EventLoop という 2 つのコア コンポーネントがあります。EventLoopGroup は本質的にはスレッド プールであり、主に I/O リクエストを受信し、処理リクエストを実行するためにスレッドを割り当てる役割を果たします。EventLoop はスレッド プール内のスレッドに相当します。
- サービス オーケストレーション レイヤー: このレイヤーには、ChannelPipeline、ChannelHandler、および ChannelHandlerContext という 3 つのコア コンポーネントがあります。ChannelPipeline は、ネットワーク リクエストを処理するためのコア構造です。複数の ChannelHandler で構成されます。各 ChannelHandler は、特定のネットワーク イベントの処理を担当します。ChannelHandler は、ネットワーク イベントを処理するための抽象化です。ChannelHandlerContext コンテキスト情報を通じてネットワーク イベントの処理を完了できます。ChannelHandlerContext は、次の情報を使用します。 ChannelHandler とネットワーク イベントの間で対話する機能を提供するために、ChannelHandler を追加または削除したり、ネットワーク イベントを上位の ChannelHandler または基礎となる Channel に渡すこともできます。
これらのコアコンポーネントによりNettyのネットワーク通信フレームワークが構成され、これらのコンポーネントを組み合わせて構成することで、ネットワーク通信の柔軟な制御を実現します。
動作原理
Netty は、ネットワーク アプリケーションを迅速かつ簡単に開発する方法を提供する、NIO ベースの Java ネットワーク プログラミング フレームワークです。Netty の動作原理は、主に Reactor モードと責任連鎖モードに基づいています。
- Reactor モード: Netty は、一般的な Reactor モードを使用してネットワーク通信を処理します。通常、Reactor パターンには 1 つ以上のイベント ハンドラーが含まれており、イベントのリッスンとディスパッチを担当します。Netty では、Reactor スレッド (通常は NioEventLoop) が、接続リクエストやデータ到着などのネットワーク イベントの監視を担当します。これらのイベントが発生すると、Reactor スレッドは、処理のために対応する ChannelPipeline 内の ChannelHandler にイベントを配布します。
- 責任チェーン モード: Netty の ChannelPipeline は、責任チェーン モードの典型的なアプリケーションです。各 ChannelPipeline には、ネットワーク イベントを処理する一連の責任を形成する一連の ChannelHandler が含まれています。イベントがパイプラインに到達すると、処理のために各ハンドラーに渡されます。各ハンドラーは、プロトコル メッセージのデコード、ビジネス ロジックの処理、メッセージのエンコードなどの特定のタスクを実行できます。
このように、Netty はネットワーク イベントの監視、配信、処理を分離し、コード構造を明確にし、保守と拡張を容易にします。同時に、Netty は、Channel、EventLoop、ChannelFuture、ChannelPipeline、ChannelHandler などの豊富なコンポーネントと機能も提供します。これらのコンポーネントにより、開発者はネットワーク アプリケーションをより効率的かつ便利に開発できます。
データ処理パス
Netty におけるデータ処理の主なパスは次のとおりです。
- データ受信: ネットワークからデータが到着すると、NioEventLoop は NioSocketChannel 経由でデータを受信し、ByteBuf に保存します。
- データのデコード: ChannelPipeline では、ByteToMessageDecoder や MessageToByteEncoder などの ChannelHandler が受信データをデコードまたはエンコードします。デコードされたメッセージは、後続の ChannelHandler に渡されて処理されます。
- ビジネス処理: ChannelPipeline では、ビジネス要件に応じて、ビジネス処理用に ChannelHandler をカスタマイズできます。ChannelHandlerでは、接続要求、切断、データ受信など、さまざまな種類のメッセージを処理できます。
- データのエンコード: ビジネス処理が完了した後、メッセージをネットワークに送信する必要がある場合、ChannelPipeline の MessageToByteEncoder などの ChannelHandler がメッセージをエンコードします。
- データ送信: 最後に、エンコードされたデータが NioEventLoop を通じてネットワークに送信されます。
このプロセスは主に Reactor モードと責任連鎖モードに基づいており、ネットワーク イベントの監視、配信、処理を分離することにより、コード構造が明確になり、保守と拡張が容易になります。同時に、Netty は、Channel、EventLoop、ChannelFuture、ChannelPipeline、ChannelHandler などの豊富なコンポーネントと機能も提供します。これらのコンポーネントにより、開発者はネットワーク アプリケーションをより効率的かつ便利に開発できます。