pockestrap

Programmer's memo

オンデマンドパルワールド

こんにちは。 id:Pocke です。最近はパルワールドというゲームをやっています。

パルワールドでは個人がサーバーを建てることができ、私も例に漏れず自宅のあまっているPCにサーバーを建てています。 ですがサーバーを管理している上でいくつか不便なことがありました。それを解決するために Itzpapalotl というアプリケーションを作ったので、紹介します。

github.com

Itzpapalotl とは

記事のタイトルの通り、パルワールドのサーバーをオンデマンドにするのが主目的のプログラムです。

課題

パルワールドのサーバーにはいくつかの問題があります。

  • パルの健康
    • サーバーが長時間稼働し続けていると、パルが飢えたり、病気になることがあります。
    • そして、病気になったパルを治療するのがとてもだるいです。
    • (この問題はv1.4.0で大幅に改善された予感はします)
  • 電気代
    • サーバーを24時間稼働させていると、電気代がかさみます。
    • 自宅に物理マシンを置いているため、不要なときにサーバーを起動するのは避けたいです。
  • ラグの発生
    • サーバーが長時間稼働し続けていると、メモリの消費が増えていきます。
    • おそらくそれが原因で、長時間起動しているサーバーではラグが強くなります。

飢えたパル

解決策

Itzpapalotl は次のように動作することで、これらの問題を解決します。

  • プロセスの起動をユーザーがログインをするまで遅延する
  • 30分間プレイヤーがいない場合、プロセスを停止する
  • プロセスのメモリ使用量が増えた場合、プロセスを再起動する

1つ目と2つ目の機能によって、パルワールドのサーバーはオンデマンドになります。 ユーザーがゲームをプレイしているときにのみサーバーのプロセスが動くため、パルは放置されすぎず、また電気代も節約できます。

また3つ目の機能によって、サーバーが長時間稼働し続けることを防ぎます。これによってゲームのラグが軽減されるでしょう(また再起動のタイミングでユーザーはログアウトさせられるため、ゲームを終える良いタイミングになるでしょう)。

使い方

インストール方法は README に譲ります。基本的には GitHub のリリースページからファイルをダウンロード、展開し、実行ファイルを任意の場所に配置するだけです。

itzpapalotlコマンドは、PalServer.shのラッパーとして動作します。たとえば次のようにコマンドを実行します。

itzpapalotl -admin-password ADMIN_PASSWORD -- /path/to/PalServer.sh -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS

他にもいくつかのオプションがあるため、itzpapalotl --helpを参照してください。

最後に

パルワールドのサーバーをオンデマンドにする、Itzpapaolotl の紹介でした。パルワールドのサーバーを建てている方は試してみていただけると嬉しいです。

今回の開発では、久しぶりに Go 言語を使ったり、RCON という初めて知るプロトコルを触ったりと、色々と勉強になって楽しかったです。よかったら GitHub リポジトリからソースコードもぜひ読んでみてください。