.. _dispatcher: Dispatcher ---------------- 概要 ++++++++++++++++++++++++ Dispatcher は RI に呼び出され、転送先ノードに関する処理を実行する。 特に転送先ノードの選出について、固有のアルゴリズムを持つ。 .. _nodelist: ノードリスト ++++++++++++++++++++++++ Dispatcher は転送先ノードの候補一覧であるノードリストを保持する。 ノードリストは選出アルゴリズムによって様々な形式が考えられる。 以下に RoundRobin 形式などで簡単に利用できるノードリストの例を示す。 :: struct node { struct node *next; uint32_t addr; }; struct node_info { struct node *node_list; struct node *last_node; uint32_t default_target; }; 上記の例の場合、他の node 構造体ポインタ変数のアドレスをメンバ変数 next へ 格納することで動的なノードリストを構築できる。 なお、RI がマルチスレッドで動作する場合は、ノードリストの操作時にロックを かける必要があるだろう。 .. _nodelistcont: ノードの追加・削除 ++++++++++++++++++++++++ RI が dtsd からノードの追加・削除の指示を受けた場合、 Dispatcher はノードリストへノードの追加・削除を行う。 このとき、ノード情報の実体を追加・削除するだけでなく、生死状態を表す フラグを切り替えるなどの手法も考えられる。 またノードの追加方法として、RI の起動オプション経由でノードリストの元となる 文字列を渡すなどする方法も可能である。 .. _dispatch: ノードの選出 ++++++++++++++++++++++++ ノードリストからアルゴリズムに従って転送先ノードを選出する。 RI が解析したリクエストから選出に必要な情報(メソッドや User agent など)を 元にノードを選出することも可能である。