アーキテクチャ

Ryuのアーキテクチャを紹介します。各クラスの使い方などAPIリファレンスもご参照ください。

アプリケーションプログラミングモデル

Ryuアプリケーションのプログラミングモデルを説明します。

_images/fig1.png

アプリケーション

アプリケーションとはryu.base.app_manager.RyuAppを継承したクラスです。ユーザーロジックはアプリケーションとして記述します。

イベント

イベントとはryu.controller.event.EventBaseを継承したクラスのオブジェクトです。アプリケーション間の通信はイベントを送受信することで行ないます。

イベントキュー

各アプリケーションはイベント受信のためのキューを一つ持っています。

スレッド

Ryuはeventletを使用したマルチスレッドで動作します。スレッドは非プリエンプトですので、時間のかかる処理を行なう場合は注意が必要です。

イベントループ

アプリケーションにつき一個のスレッドが自動的に作成されます。このスレッドはイベントループを実行します。イベントループは、イベントキューにイベントがあれば取り出し、対応するイベントハンドラ(後述)を呼び出します。

追加のスレッド

hub.spawn関数を使用して追加のスレッドを作成し、アプリケーション固有の処理を行なうことができます。

eventlet

eventletの機能をアプリケーションから直接使用することもできますが、非推奨です。可能ならhubモジュールの提供するラッパーを使用するようにしてください。

イベントハンドラ

アプリケーションクラスのメソッドをryu.controller.handler.set_ev_clsデコレータで修飾することでイベントハンドラを定義できます。イベントハンドラは指定した種類のイベントが発生した際に、アプリケーションのイベントループから呼び出されます。