Java NIO の観点から Netty を理解する

序文

前回の記事「Netty 入門ガイド」では、Netty の開発履歴、コア機能とコンポーネントなど、Netty の入門知識を主に説明し、Netty を使用して HTTP サーバーを構築する方法を例を通して説明しました。Netty は抽象度が高いため、より複雑で理解しにくい場合があります。そのため、この記事では、Java NIO の処理フローと Netty の全体的なプロセスを比較し、Netty をより明確に理解するために Netty のソース コードを組み合わせます。

Java NIO の仕組み

まず第一に、Netty は Java NIO に基づいたネットワーク アプリケーション フレームワークであり、それに基づいてカプセル化および拡張されていることがわかります (そのため、Netty を深く理解する前に、Java NIO についてある程度の理解を持っておくことをお勧めします)。両者はネットワーク接続をよく理解しています。読み取りと書き込みの動作モードは似ています。
Java NIO の仕組み
Java NIO コードの例

上図に示すように、Java NIO の処理フローと Java NIO コード例を組み合わせると、各イベントをServerSocketChannel登録してリッスンした後、イベント要求を受信した後、ビジネス コードがそれを判断して処理していることがわかります。Netty を使用する場合 これらのコードを記述する必要はないようで、「,」という単語さえ表示されません。では、これらのコードが Netty にどのように反映されるかを見てみましょう。上記では Netty によって構築された HTTP サーバーを例として、「 」がいつ作成され、いつイベントが登録および処理されたのかに直接焦点を当てますSelectorSelectorSelectorServerSocketChannel
ここに画像の説明を挿入
ServerSocketChannelSelector

セレクターの作成

EventLoop実際、前の記事で Netty の概要を読んだ後、がさまざまなイベントの処理を担当していることがわかるので、 で作成するSelector 必要があると盲目的に推測できます。NioEventLoopGroup

ここに画像の説明を挿入
NioEventLoopGroupJDK の構築メソッドでは、Java NIO のコードをSelectorProvider作成するために呼び出されます。Selector

ServerSocketChannelの作成

ServerSocketChannelの作成に関しては、次の図に示すように、ポートをバインドする方法を直接見つけます。
ここに画像の説明を挿入

NioServerSocketChannelNettyのコードnewChannel()内の Java NIO のコードも参照してください。

ServerSocketChannel の登録セレクター

以下の図では、ServerSocketChannel 作成後に a が割り当てられ、新しいスレッドが開始され (これは Netty のマルチスレッド非同期の具体化でもあります)、最後にJDK を呼び出してイベントをリッスンするEventLoopインターフェイスに登録されます。を見れば明らかになるはずです。doRegister() SelectorselectionKey
ここに画像の説明を挿入

イベントの処理

ServerSocketChannelイベントを登録してリッスンしたので、次のステップはSelectorイベントが来たときにEventLoopそれを処理しNioEventLoop、コードを直接確認することです。イベントは新しいスレッドを通じて開始されるため、run()
ここに画像の説明を挿入
processSelectedKeysPlain()調べて監視されているので直接 at
ここに画像の説明を挿入
図では、ChannelPipeline拡張に便利な責任連鎖モードを使用してイベントを処理しています。Netty の読み取りイベントと Java NIO の関係は、次の図に示されています。

ここに画像の説明を挿入

要約する

したがって、Netty に触れる前に、まず Java NIO をマスターする必要があります。この記事では、誰もが Netty をより便利に理解できるように、Netty での Java NIO の実施形態と Netty による Java NIO のカプセル化についてのみ紹介しており、Netty の効率的で効率的な機能については説明しません。迫力あるデザインですので、以下でご紹介します。

おすすめ

転載: blog.csdn.net/qq_28314431/article/details/132343223