2014年9月16日火曜日

リクエスト処理の流れ: start_lingering_close_blocking

process_socket()でのソケットを閉じる処理を見ておく。

(httpd-2.4.9/server/mpm/event/event.c)
    881 static void process_socket(apr_thread_t *thd, apr_pool_t * p, apr_socket_t * sock,
    882                           event_conn_state_t * cs, int my_child_num,
    883                           int my_thread_num)
    884 {
     :
   1024     if (cs->pub.state == CONN_STATE_LINGER) {
   1025         if (!start_lingering_close_blocking(cs))
   1026             return;
   1027     }

1025行目のstart_lingering_close_blocking()が、ソケットを閉じる処理(shutdown(SHUT_WR))を行う。
引数はcs(event_conn_state_t情報)のみだが、cs->cは、conn_rec情報を持っている。

2014年9月9日火曜日

HTTP/2.0関連のメモ

気になったことのメモ。
すこし前だが、httpd-devのメーリングリストを眺めてみると、ApacheでHTTP/2.0への取り組み状況についての質問があった。

2014/8/27
http://mail-archives.apache.org/mod_mbox/httpd-dev/201408.mbox/%3C18003_1409146109_53FDDCFD_18003_15983_1_1CC5193368C9BD44A3CC59EEC93319BAD34D67@OPEXCLILM42.corporate.adroot.infra.ftgroup%3E

これに対して、コミッタのEric Covener氏が返信している
http://mail-archives.apache.org/mod_mbox/httpd-dev/201408.mbox/%3CCALK=YjONaJzKsYouzrYJrhT=ZXW6oHbZCgtBH9nfi5wuP=qwDw@mail.gmail.com%3E
> Hi Hugues -- there isn't really any work going on in this area unfortunately.
>
> mod_spdy has been copied over to httpd source control, but there
> hasn't really been work on that either.  There is a good talk on its
> design on youtube.  Either the design/lessons learned or the code
> would be good head start on HTTP/2 support.

何もしてない、と言っているように思えた。

http://www.publickey1.jp/blog/14/http_20httpbis.html
の記事では、HTTP/2は来春にはRFCになるかもしれない、と紹介されていた。

ん~、どうかな。

2014年9月4日木曜日

リクエスト処理の流れ: process_socket に戻る

(3)event MPM: process_socket関数 (再)


process_socket()関数は、workerスレッドが実行するリクエスト処理の起点だ。
リクエストの処理の流れ で見ている。

(httpd-2.4.9/server/mpm/event/event.c)
    881 static void process_socket(apr_thread_t *thd, apr_pool_t * p, apr_socket_t * sock,
    882                           event_conn_state_t * cs, int my_child_num,
    883                           int my_thread_num)

第1引数のapr_thread_t構造体は、pthread_tをメンバに持つスレッド情報。
第2引数のapr_pool_t構造体は、このトランザクションで使用するメモリプール情報。transactionメモリプールである。
第3引数のapr_socket_t構造体は、通信用のソケット情報。
第4引数のevent_conn_state_t構造体は、eventMPMの状態管理情報。
第5引数のint型は、子プロセスの管理番号。スコアボードのプロセス情報のインデックスになる。
第6引数のint型は、ワーカスレッドの管理番号。スコアボードのワーカ情報のインデックスになる。