Friday, August 14, 2009

Sinatraの仕組み

Sinatraではruby app.rbでWebサーバーが起動する
そしてapp.rbのトップレベルのhttpメソッド(ex.get)でhttpリクエストが扱えるようになる
まずはサーバー起動の仕組み
  1. requireしたmain.rbが読み込まれるとその実行の最後at_exitでbase.rbのSinatra::Application.run!が呼ばれる
  2. Applicationクラスは、Default,Baseの継承クラスでBaseクラス内のrun!メソッドが起動する
  3. run!メソッドは起動するHTTPサーバーを選択し,RackのRack::Handler.getを介してそのハンドラークラス(ex.Mongrelクラス)のrunメソッドを呼び出す
  4. ハンドラークラスのrunメソッドでは、対応するWebサーバのオブジェクトが生成され(ex.::Mongrel::HttpServer.new)runされる
  5. これでsocketのTCPServerオブジェクトが生成され、Clientからのリクエストをacceptできるよう待ち受けるようになる
トップレベルの仕組み
  1. main.rbでincludeされたSinatra::Delegagotは,app.rbで定義したgetなどの既定メソッドをSinatra::Applicationクラスに委譲する
  2. ApplicationのスーパークラスであるBaseクラスにはgetなどのクラスメソッドが定義されておりここにトップレベルのメソッドの引数およびブロックを渡す
browserからリクエストがあったときの挙動についてはまだ

No comments: