オンデマンドパルワールド
こんにちは。 id:Pocke です。最近はパルワールドというゲームをやっています。
パルワールドでは個人がサーバーを建てることができ、私も例に漏れず自宅のあまっているPCにサーバーを建てています。 ですがサーバーを管理している上でいくつか不便なことがありました。それを解決するために Itzpapalotl というアプリケーションを作ったので、紹介します。
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 リポジトリからソースコードもぜひ読んでみてください。