組織架構¶
本章介紹 Ryu 的架構。 關於每一個 Class 請參照 API 參考資料 來得到更細節的資料。
應用程式開發模型( Application programming model )¶
以下是 Ryu 應用程式的開發模型
應用程式( Application )¶
應用程式是繼承 ryu.base.app_manager.RyuApp
而來。User logic 被視作是一個應用程式。
事件( Event )¶
事件是繼承 ryu.controller.event.EventBase
而來,並藉由 Transmitting 和 receiving event 來相互溝通訊息。
事件佇列( Event queue )¶
每個應用程式都有一個自己的佇列用來接受事件訊息。
執行緒( Thread )¶
Ryu 採用 eventlet 來實現多執行緒。因為執行緒是不可插斷的( non-preemptive ),因此在使用上要特別注意長時間運行所帶來的風險。
事件迴圈( Event loop )¶
當應用程式執行時,將會有一個執行緒自動被產生用來執行該應用程式。 該執行緒將會做為事件迴圈的模式來執行。如果在事件佇列中發現有事件存在,該事件迴圈將會讀取該事件並且呼叫相對應的事件處理器來處理它。
額外的執行緒( Additional thread )¶
如果需要的話,你可以使用 hub.spawn 產生額外的執行緒用來執行特殊的應用程式功能。
eventlet¶
雖然你可以直接使用 eventlet 所提供的所有功能,但不建議你這麼做。 請使用 hub module 所包裝過的功能取代直接使用 eventlet。
事件處理器( Event handler )¶
藉由使用 ryu.controller.handler.set_ev_cls
裝飾器類別來定義自己的事件管理器。當定義的事件發生時,應用程式中的事件迴圈將會偵測到並呼叫對應的事件管理器。