約2か月ぶりのブログ更新です。
NetSimutransで開発が進むとログイン時間が長くなることがあると思います。
これは2014年頃に行ったセーブデータ形式毎のログイン時間を計測してどのファイル形式がNetSimutransに向いた形式なのかをしました。今更ながら掲載します。
最初に結論を出しておきますが、「xml形式でなければどの形式でもログイン時間は変わらないので、より軽量なbzip2形式が最適」です。あくまでも2014年当時の計測に基づく結論です。
前提となる知識として、いくつか話をしておきます。
まず、Simutransのログイン処理です。
誰かがログインしたときの処理は次のようになっています。
1.サーバーでゲームを保存する
2.すべての参加者に保存したセーブデータを転送する
3-1.各クライアントはセーブデータの転送が完了次第ロードする
3-2.サーバーはすべてのクライアントに転送が完了したらロードする
4.各クライアントはロードが終了したらサーバーのロード完了まで停止状態
5.サーバーでロード完了したら他のクライアントのロード完了を待たずにゲームは動き始める
6.サーバーよりもロードが遅かったクライアントはロード完了次第早送りでサーバーの時間まで追いつく
これが一連の流れとなっています。
2014年当時、自分はサーバーの運営を行っていましたが、ログイン処理に時間がかかること、特にセーブとロードに時間がかかっていることに気が付きました。そこでセーブデータの形式を変えることによって改善できるのではないかと考えました。
そこで、Simutransの設定ファイルであるSimuconfでは6種類のセーブデータ形式があります。
設定ファイル/simuconf.tab - Simutrans日本語化・解説
↑に書かれていることをそのままに紹介します。
セーブデータの圧縮形式を指定します。現在はZipのみ対応で、圧縮しない場合は"binary"を指定してください。
102.2.2以降bzip2での圧縮もサポートされています。
bzip2 ... bzip2圧縮保存。zipよりもファイルサイズが小さくなるため、ネットワークゲームに適しています。ただし圧縮解凍はzipよりも若干遅くなります。(102.2.2以降)
binary ... 圧縮せずに保存
xml ... xmlで保存(101.0以降)
xml_zipped ... xmlでzip圧縮して保存(101.0以降)
xml_bzip2 ... xmlでbzip2圧縮して保存(102.2.2以降)
1st
Client読み込み完了 2'30"
Host読み込み完了 5'15"
データ容量:※記録忘れ
Client読み込み完了 2'40"
Host読み込み完了 4'20"
データ容量:12631kb
Client読み込み完了 2'41"
Host読み込み完了 4'27"
データ容量:13014kb
Client読み込み完了 2'43"
Host読み込み完了 4'30"
データ容量:12732kb
1st
Client読み込み完了 2'47"
Host読み込み完了 4'35"
データ容量:9086kb
Client読み込み完了 2'47"
Host読み込み完了 4'25"
データ容量:9016kb
Client読み込み完了 2'48"
Host読み込み完了 4'34"
データ容量:9198kb
Client読み込み完了 2'50"
Host読み込み完了 4'29"
データ容量:9418kb
1st
Client読み込み完了 2'50"
Host読み込み完了 4'27"
データ容量:64729kb
Client読み込み完了 2'50"
Host読み込み完了 4'28"
データ容量:65033kb
Client読み込み完了 2'51"
Host読み込み完了 4'36"
データ容量:65591kb