調べ物。(途中)
ファイルディスクリプタを監視する。
main関数 : int main (int argc, char **argv)
server_sockets : server_sockets
server_socket()
を呼んでる(小並感)server_socket : server_socket(interface, port, transport, portnumber_file)
c = conns[sfd];
SFDに対するコネクションを取って、NULLなら初期化。c->rbuf
, c->wbuf
をmalloc。STATS_LOCK()
の中身は pthread_mutex_lock(&stats_lock);
共通のstatを触るときはロックを獲得する。event_set()
, event_base_set()
, event_add()
event_handler()
)を設定。c->which = which
ってあるけど、which
ってなんだろう。sfd
が 読み込み可能になる。 そのイベントを select
なり poll
なり epoll
(もしくはそれらをラップした libevent
) で受け取ってやればいいわけだ。dispatch_conn_new(sfd, conn_new_cmd, ...)
を呼ぶ。try_read_command(c)
でコマンドをパース?データが全部来ていないなら、conn_waiting
に戻す。c->ritem
にデータを貯めようとする。c->msglist[c->msgcurr]
を書き込み処理?process_command()
または dispatch_bin_command()
を呼ぶ。process_xxx_command(c, tokens, ...)
を呼ぶ。it = limited_get(key, nkey, c);
の部分っぽい。item_get(key, nkey, c, DO_UPDATE)
を呼んでた。conn_mwrite
にして書き込ませる。一旦 process_get_command
に限定して処理を追っていこう。
hash(key, nkey)
が呼ばれてる。中身は hash.c にあり、設定によって jenkins
か murmur3
のどちらかが選ばれる。do_item_get
を呼び出してハッシュ値に対応するitemを探す。item
を探す。ハッシュテーブルの本体実装。