Reactorモデルの概要

原子炉モデル

上の図は、Reactorモデルの役割の最も信頼できる定義です。

Reactorモードの役割構成(合計5つの役割):

1.ハンドル(ハンドルまたは記述子):

これは、基本的にはオペレーティングシステムによって提供されるリソースです。リソースの変更は、ネットワークプログラミングでのファイル記述子やソケット記述子などのイベントを表すために使用されます。イベントは、外部または内部から発生する可能性があります。クライアント接続要求、クライアントによって送信されたデータなどの外部イベント、オペレーティングシステムによって生成されたタイマーイベントなどの内部イベント。基本的にはファイル記述子です。ハンドルはイベントの発祥の地です。

2.同期イベントデマルチプレクサー(同期時間セパレーター):

それ自体はシステムコールであり、イベントの発生を待機するために使用されます(1つまたは複数の場合があります)。呼び出しメソッドは、同期イベントセパレーターに不明なイベントが存在するまで、呼び出されるとブロックされます。Linuxの場合、同期イベントセパレーターは、一般的に使用されるI / O多重化メカニズムを指します。たとえば、select、poll、epollなどです。Java NIOフィールドでは、同期イベントセパレーターの対応するコンポーネントはセレクターであり、対応するブロッキングメソッドは選択メソッドです。

3.イベントハンドラ:

これは複数のコールバックメソッドで構成され、これらのコールバックメソッドは、アプリケーション関連のイベントのフィードバックメカニズムを構成します。Java NIOと比較して、Nettyはイベントハンドラーの役割をアップグレードし、特定のイベントが生成されたときにビジネスロジックに対応するコールバックメソッドを実装するための多数のコールバックメソッドを開発者に提供します。扱う。

4.具体的なイベントハンドラー(特定のイベントハンドラー):

これは、イベントハンドラーの実現です。それ自体が、イベントハンドラーによって提供されるコールバックメソッドを実装し、ビジネス固有のロジックを実現します。それは本質的に私たちが書いた各プロセッサの実装です

5.開始ディスパッチャー(初期化ディスパッチャー):

実際、それはNettyにおけるReactorの役割です。それ自体が、イベントのスケジューリングを制御するために使用されるいくつかの仕様を定義すると同時に、アプリケーションがイベントハンドラーを登録および削除する機能を提供します。それ自体がイベントプロセッサ全体の中核であり、開始ディスパッチャは、同期時間セパレータを介してイベントが発生するのを待ちます。イベントが発生すると、開始ディスパッチャは、同期イベントセパレータを介してイベントが発生するまで待機します。イベントが発生すると、開始ディスパッチャーは最初に各イベントを分離し、次にイベントハンドラーを呼び出し、最後に関連するコールバックメソッドを呼び出してこれらのイベントを処理します。

 


Reactorモードの実行プロセス

1.アプリケーションが特定のイベントハンドラーをInitiation Dispatcherに登録すると、アプリケーションは、イベントハンドラーがイベントが発生したときにInitiation Dispatcherがイベントに通知することを望んでおり、イベントがHandleに関連付けられていることを識別します。

2. Initiation Dispatcherは、各イベントハンドラーに内部ハンドルを渡すように要求します。Handleは、オペレーティングシステムに対してイベントハンドラーを識別します。

3.すべてのイベントハンドラーが登録された後、アプリケーションは、handle_eventsメソッドを呼び出して、Initiation Dispatcherのイベントループを開始します。このとき、開始ディスパッチャは各ハンドルをマージし、同期イベントセパレータを使用してこれらのイベントが発生するのを待ちます。次に例を示します。TCPプロトコルレイヤは、select同期イベントセパレータを使用して、クライアントから送信されたデータがソケットハンドルに到着するのを待ちます。

4.イベントソースに対応するハンドルが準備完了になると(たとえば、TCPソケットが読み取りを待機するようになると)、同期イベントセパレーターが開始ディスパッチャーに通知します。

5. Initiation Dispatcherは、イベントハンドラーコールバックメソッドをトリガーして、準備完了状態のハンドルに応答します。イベントが発生すると、Initiation Dispatcherはイベントソースによってアクティブ化されたハンドルをキーとして使用し、適切なイベントハンドラーコールバックメソッドを見つけて配布します。

6. Initiation Dispatcherは、イベントハンドラーのhandle_eventsコールバックメソッドをコールバックして、このイベントに応答してアプリケーション固有の機能(開発者が作成したビジネスロジック)を実行します。発生するイベントのタイプはメソッドパラメータとして使用でき、メソッドによって内部的に使用されて、サービス固有の分離と開発を追加で実行できます。


マスターダグリーによって記述されたリアクターモデルは、上の図と同じ意味です。

 

Initiation DispatcherはReactorロールに対応します

 

 

 

 

 

おすすめ

転載: blog.csdn.net/qq_36807862/article/details/95465561