Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法

Gosuke Miyashita
Gosuke MiyashitaSoftware Engineer
YAPC::Asia 2009 Tokyo 2009/9/10 宮下 剛輔
自己紹介 ,[object Object],[object Object],[object Object],[object Object]
 
 
アジェンダ ,[object Object],[object Object],[object Object],[object Object],[object Object]
 
イベント駆動型プログラミング ,[object Object],[object Object]
イベントの種類 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
メインループ ,[object Object],[object Object],[object Object],[object Object],[object Object]
メインループの例 タイマー処理 I/O イベント待ち I/O イベント処理 ポストメインループ処理
 
Danga::Socket が対応してるイベント ,[object Object],[object Object]
I/O イベント処理 ,[object Object],[object Object],[object Object],[object Object],[object Object]
epoll の例 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Danga::Socket での I/O イベント登録 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Danga::Socket での I/O イベント登録 その 2 ,[object Object],[object Object],[object Object],[object Object],[object Object]
Danga::Socket での I/O イベント登録 その 3 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Danga::Socket でのタイマーイベント登録 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Danga::Socket でのメインループの開始 ,[object Object]
メインループ処理のおさらい タイマー処理 I/O イベント待ち I/O イベント処理 ポストイメインループ処理
 
Perlbal の動作(リバースプロキシとして利用の場合) BackendHTTP ClientProxy TCPListener Client Server ClientProxy Client BackendHTTP Danga::Socket ベースの オブジェクト
Perlbal プラグインの動作 (start_proxy_request フック) BackendHTTP ClientProxy TCPListener Client Server Plugin::Hoge 今回のターゲット
 
対象となるフック ,[object Object]
同期処理プラグインの場合 ClientProxy TCPListener Client Server Plugin::Sync Client
非同期処理プラグインの場合 ClientProxy TCPListener Client Server Plugin::Async Client ClientProxy
プラグインを非同期にするには? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
プラグインを非同期にするには? ,[object Object],[object Object],[object Object]
非同期処理するクラス ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
注意 ,[object Object],[object Object],[object Object],[object Object]
プラグイン register 処理 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
非同期処理クラスの呼び出し ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
return 0  の場合 BackendHTTP ClientProxy TCPListener Client Server Plugin::Async Plugin::Async の処理が 終わらないのに次の処理へ
return 1 &コールバック処理 BackendHTTP ClientProxy TCPListener Client Plugin::Async 処理を終了して イベントループへ Server return 1 コールバック
コールバックで必要な処理 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
コールバック処理 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
ClientProxy::handle_request の修正 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
 
非同期処理プラグインを書くポイント ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
 
1 of 41

More Related Content

What's hot(20)

TracWysiwygPluginTracWysiwygPlugin
TracWysiwygPlugin
Jun Omae686 views
WebDAV as Web APIWebDAV as Web API
WebDAV as Web API
Masaki Komagata3.3K views
RDF and FOAFRDF and FOAF
RDF and FOAF
Masaki Komagata1.6K views
What is PHP Frameworks?What is PHP Frameworks?
What is PHP Frameworks?
Masaki Komagata1.2K views
AngelvicAngelvic
Angelvic
Angelvic Marin119 views
PHPUnit+SeleniumによるWebテストPHPUnit+SeleniumによるWebテスト
PHPUnit+SeleniumによるWebテスト
Makio Tsukamoto2.5K views
Cookie 8 mariiu flash 25 02Cookie 8 mariiu flash 25 02
Cookie 8 mariiu flash 25 02
Angelito Abanto Cerdan150 views
YarvmiYarvmi
Yarvmi
Akio Tajima984 views
Web技術勉強会 第28回Web技術勉強会 第28回
Web技術勉強会 第28回
龍一 田中379 views
Linux PrimerLinux Primer
Linux Primer
zhang bender275 views
Asp.Net2 12Asp.Net2 12
Asp.Net2 12
Chui-Wen Chiu579 views
PHP 防駭 - 基礎觀念篇PHP 防駭 - 基礎觀念篇
PHP 防駭 - 基礎觀念篇
Jace Ju6.5K views
136 Ch136 Ch
136 Ch
anjaan684 views

More from Gosuke Miyashita(17)

Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法