.. _ch_arch: アーキテクチャ ============== Ryuのアーキテクチャを紹介します。 各クラスの使い方など `APIリファレンス `_ もご参照ください。 アプリケーションプログラミングモデル ------------------------------------ Ryuアプリケーションのプログラミングモデルを説明します。 .. only:: latex .. image:: images/arch/fig1.eps .. only:: not latex .. image:: images/arch/fig1.png アプリケーション ^^^^^^^^^^^^^^^^ アプリケーションとは ``ryu.base.app_manager.RyuApp`` を継承したクラスです。 ユーザーロジックはアプリケーションとして記述します。 .. XXX他の章への参照 例としてxxx章で紹介したyyy〜などがあります。 イベント ^^^^^^^^^^ イベントとは ``ryu.controller.event.EventBase`` を継承したクラスの オブジェクトです。 アプリケーション間の通信はイベントを送受信することで行ないます。 イベントキュー ^^^^^^^^^^^^^^ 各アプリケーションはイベント受信のためのキューを一つ持っています。 スレッド ^^^^^^^^ Ryuはeventletを使用したマルチスレッドで動作します。 スレッドは非プリエンプトですので、時間のかかる処理を行なう 場合は注意が必要です。 イベントループ """""""""""""" アプリケーションにつき一個のスレッドが自動的に作成されます。 このスレッドはイベントループを実行します。 イベントループは、イベントキューにイベントがあれば取り出し、 対応するイベントハンドラ(後述)を呼び出します。 追加のスレッド """""""""""""" hub.spawn関数を使用して追加のスレッドを作成し、アプリケーション固有の 処理を行なうことができます。 eventlet """""""" eventletの機能をアプリケーションから直接使用することもできますが、 非推奨です。 可能ならhubモジュールの提供するラッパーを使用するようにしてください。 イベントハンドラ ^^^^^^^^^^^^^^^^ アプリケーションクラスのメソッドを ``ryu.controller.handler.set_ev_cls`` デコレータで修飾することでイベントハンドラを定義できます。 イベントハンドラは指定した種類のイベントが発生した際に、 アプリケーションのイベントループから呼び出されます。 .. XXX CONTEXTS .. XXX イベント種別 .. XXX openflow message .. XXX ryu-managerなどの説明はどの章???