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