vrowser

Left 4 Dead 2 や Team Fortress 2 など、HalfLife2 系(Source Engine)ゲームのサーバーブラウザを作るための Ruby ライブラリです。ゲームサーバー統計取得ツールの QStat をラップして、サーバー一覧の取得・データベースへの記録・JSON API での配信までを一式でやります。

gem として公開していて、コマンドラインツールも同梱しています。

gem install vrowser
vrowser sample                # サンプル設定ファイルを生成
vrowser -f config.yml fetch   # マスターサーバーからサーバー一覧を取得
vrowser -f config.yml update  # 登録済みサーバーの状態を更新
vrowser -f config.yml daemon  # 常駐デーモンとして起動

内部設計

コンポーネント構成です。中核の Vrowser クラスが QStat の呼び出しと Sequel(ORM)経由の DB 記録を束ねていて、CLI・常駐デーモン・Sinatra アプリのどこからでも同じ処理を呼べる作りになっています。

vrowser のコンポーネント構成図

デーモンの更新サイクルはこうなっています。マスターサーバーへの問い合わせは重いので、一覧の再取得は約30分に1回、その間は登録済みサーバーへの個別クエリ(A2S)を150秒間隔で回す二段構えです。

vrowser の更新サイクルのシーケンス図

応答がなくなったサーバーは即削除せず status=DOWN にマークしておき、clear でまとめて掃除します。

自作 gem の組み合わせでできていて、QStat の呼び出しとパースは ruby-qstat、マスターサーバー取得の失敗時リトライは retry-handler を使っています。