Hatena::Groupxn--272ax3f

nginx輪講#4

nginx輪講#4

プレゼンテーション

nginx 輪講

  • 第4回目です
  • suzak が読んだところの続きから

これまでのお話

  • nginx.c
    • main
  • ngx_process_cycle.c
    • ngx_single_process_cycle(cycle);

なんか cycle という イベントマシンを作ってぐるぐるしてるぽい

ngx_single_process_cycle(cycle);

  • 涙目
    for ( ;; ) {
        ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
        ngx_process_events_and_timers(cycle);
    }

antipop さん会

    for ( ;; ) {
        ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
        ngx_process_events_and_timers(cycle);
    }
  • ngx_process_event_and_timers は マクロ
  • 実態は、event の実装によって異なる
  • src/event/modules/ngx_HOGE

suzak 会

  • src/event/modules/ngx_HOGE
  • linux だと epoll, osx だと kqueue
  • ngx_epoll_module.c

その前に gdb

閑話休題

  • HTTPリクエストを読むところまで読んだ
  • リクエストのC文字列に対して、
    • 一文字づつ読み込んで、case 文でステートマシンが走る...
    • ポインタで header の各要素を保持してたり
  • 独自メモリプールの取得と開放してたり...

今日は

  • HTTPレスポンスを作るところまでいけるといいですね
  • linux 環境じゃないので kqueue です
  • 馬鹿なの死ぬの...