読者です 読者をやめる 読者になる 読者になる

頼りないニモニック

はっきりいって個人の日記レベル

サーバ移転と最近のMinesurf

f:id:nanase_t:20130509134653j:plain

Minecraft のサーバをさくらVPSから、れいがんさんのサーバに移行しました。ありがとうございます。
サーバ移転のついでとして、サイトのページデザインも変更しました。コンテンツへはすべてリンク形式になっています。


以前のサーバのリソース逼迫のために、Minesurf では極力軽量化をめざしました。最近の更新内容では軽量化が殆どです。現在のバージョンでは v0.3.5-beta です。
v0.3-beta から、生成後の JSON ファイルの GZip 圧縮およびリージョンごとのファイル生成に変更しました。256 チャンクで 1 リージョンですから、単純に考えてファイルの効率も 256 倍です。

その他、Bukkit 由来のバグの修正もしました。以前まで溶岩は surface(表面) として処理していましたが、どうやらさらにその上の nonsolid(非個体面) として認識されていたようです。それを修正して正常に surface と認識されるように修正しました。

チャンク情報取得フローは大体以下のようになります。

  1. プレイヤーが移動またはログインした時、元のリージョン座標(ブロック座標を各軸右に8シフト)の値がリージョンキューに存在しない場合、リージョン座標をそのキューに入れる。
  2. すべてのプレイヤーがサーバからログアウトした時、一定時間が経過する。
  3. キューが空でない場合、プレイヤーがログインしない限り一定間隔でデキューしていく。
  4. デキューされたリージョン座標を元に、生成先ファイルパスを作成し、既にファイルが存在するならばファイル更新日時が一定時間経過したものを次の処理に回す。一定時間内であれば破棄する。
  5. リージョンの座標からチャンク座標を求め、256 チャンク分の情報を取得する。
  6. 情報を JSON として出力し、圧縮をかけて保存する。(終わり)

以前はプレイヤーが移動するたびにチャンクの情報を取得していました。その後 如実にラグが発生するようになり、現在のプレイヤーがログインしていないときに情報を取得するという形式に変わりました。ちなみにワールドデータは 1 GB を超過しており、以前の形式でファイルを出力するとおよそ 90,000 ファイル(=チャンク) で 600 MB という非常に大きく扱いづらいものになっていました。

実はチャンクデータ以外でも、前に書いたとおり、プレイヤーやワールドの情報も JSON で出力しています。新サーバへ移転したことで若干の処理規制解除をしたいと考えています。