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