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

ペルリ的な何かなブログ

Simutransとかいろいろ自由気ままに書き散らす

NetSimutransに向いてるセーブデータ形式に関する観測とその見解

約2か月ぶりのブログ更新です。

NetSimutransで開発が進むとログイン時間が長くなることがあると思います。

これは2014年頃に行ったセーブデータ形式毎のログイン時間を計測してどのファイル形式がNetSimutransに向いた形式なのかをしました。今更ながら掲載します。

 

最初に結論を出しておきますが、「xml形式でなければどの形式でもログイン時間は変わらないので、より軽量なbzip2形式が最適」です。あくまでも2014年当時の計測に基づく結論です。

 

前提となる知識として、いくつか話をしておきます。

 

まず、Simutransのログイン処理です。

誰かがログインしたときの処理は次のようになっています。

1.サーバーでゲームを保存する

2.すべての参加者に保存したセーブデータを転送する

3-1.各クライアントはセーブデータの転送が完了次第ロードする

3-2.サーバーはすべてのクライアントに転送が完了したらロードする

4.各クライアントはロードが終了したらサーバーのロード完了まで停止状態

5.サーバーでロード完了したら他のクライアントのロード完了を待たずにゲームは動き始める

6.サーバーよりもロードが遅かったクライアントはロード完了次第早送りでサーバーの時間まで追いつく

これが一連の流れとなっています。

2014年当時、自分はサーバーの運営を行っていましたが、ログイン処理に時間がかかること、特にセーブとロードに時間がかかっていることに気が付きました。そこでセーブデータの形式を変えることによって改善できるのではないかと考えました。

 

そこで、Simutransの設定ファイルであるSimuconfでは6種類のセーブデータ形式があります。

設定ファイル/simuconf.tab - Simutrans日本語化・解説

↑に書かれていることをそのままに紹介します。

 

saveformat = bzip2
 セーブデータの圧縮形式を指定します。現在はZipのみ対応で、圧縮しない場合は"binary"を指定してください。
102.2.2以降bzip2での圧縮もサポートされています。
zipped ... zip圧縮保存
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以降)
 
とのことで、要するに「非圧縮形式と圧縮する形式が2つ、それぞれにxml方式で保存することができる」わけです。
ここで自分が目を付けたのはセーブデータを圧縮して保存し、それを解凍する時間とゲームの転送時間のどちらを取るか?です。
圧縮すればそれだけ「圧縮解凍に時間がかかる」、それを行わなければセーブデータ容量が大きくなり「転送に時間がかかる」と仮定し、圧縮解凍と転送のどちらを選べば早いのかを検証しました。
 
検証は2014年の5月に行いました。本体バージョンは112.4のナイトリー版r7132です。当時やっていた対戦の環境を誰もいない時間にそのまま使って行いました。
自分はサーバー向けに1台PCを用意して、別のPCでログインして遊んでいましたので回線速度は十分にあり、その変動は少ないと思います。
 
その結果は以下の通りとなっています。
zipped
1st
Client読み込み完了 2'30"
Host読み込み完了  5'15"
データ容量:※記録忘れ
2nd
Client読み込み完了 2'40"
Host読み込み完了  4'20"
データ容量:12631kb
3rd
Client読み込み完了 2'41"
Host読み込み完了  4'27"
データ容量:13014kb
4th
Client読み込み完了 2'43"
Host読み込み完了  4'30"
データ容量:12732kb
bzip2
1st
Client読み込み完了 2'47"
Host読み込み完了  4'35"
データ容量:9086kb
2nd
Client読み込み完了 2'47"
Host読み込み完了  4'25"
データ容量:9016kb
3rd
Client読み込み完了 2'48"
Host読み込み完了  4'34"
データ容量:9198kb
4th
Client読み込み完了 2'50"
Host読み込み完了  4'29"
データ容量:9418kb
xml_bsip2
Client読み込み完了 接続不可(ゲーム保存に時間がかかりすぎてタイムアウト)
Host読み込み完了  計測中止
データ容量:12055kb
binary
1st
Client読み込み完了 2'50"
Host読み込み完了  4'27"
データ容量:64729kb
2nd
Client読み込み完了 2'50"
Host読み込み完了  4'28"
データ容量:65033kb
3rd
Client読み込み完了 2'51"
Host読み込み完了  4'36"
データ容量:65591kb
 
という結果でした。もちろん3年前のバージョン112.4なので、今はもう少し早くなっていると思われますが、当時のデータということで。
 

#NetSimutrans の無人運用をしてみる

思えば今月何も記事を書いてないので、無駄話を兼ねて。

今回はNSのサーバーの無人運用の話です。

自分の場合、夜勤で長時間家を空けたり、遠出で4日くらい平気で開けるので必須の話となります。

しかしながら、Simutransの動作が不安定なので、自動で再起動するような工夫が必要になります。

NSwikiにはDDNS自動登録ツールや自動再起動ソフトも紹介されていて、必須と思っています。

DDNS自動登録はたまに(ルーターの再起動など)グローバルIPが変更されてしまうことがあり、それでログインできなくなるのを防いでくれます。

自動再起動ツールはSimutrans本体が動作を停止したときにそれを自動で判別して再起動してくれるツールです。

http://w-shadow.com/blog/2009/03/04/restart-on-crash/

↑NSWikiなどで紹介されているツールです。

http://www.gigafree.net/security/process/restartoncrash.html

↑その使い方です。

このツールはロード/セーブ中にも動作停止を誤検知することがあるので、数分単位で応答しなくなった時にのみ再起動がかかる設定にするといいです(自分の場合は5分程度で設定しています)。

非常に便利なのですが、Simutransが応答なしにならないと動作停止しなく、FATEL ERRORなどが出ている間は動作し続けてることになります。そこで、定期的にキー入力をするようにさらに外部ツールに頼っています。

自動キー入力「まけいぬ」/使用方法|合法便利ツール/MMORPG向けツール

↑コレで一定間隔ごとにSimutransへ特定のキー入力をさせることによってSimutransのエラーから強制停止に持っていけます。(通常であればEnterキーとか押下すると思いますが、その代わりです。)

数秒間隔でもいいのですが、自分の場合はPCの負荷を抑えるために30秒に設定しています。

いまのところ、ABNSもこれで問題なく稼働しています。

#NetSimutrans の回線同士の相性についてのメモ

未検証な内容が多いので先に断っておきます。何一つ検証していないので信頼性に乏しいです。

 

NetSimutransではたびたび切断されたりします。

その関係について今までの経験則から語っていきます。

 

☆ログイン時の挙動について

まず、始めに各クライアントからの接続要求(ゲームに参加する)が来たときの挙動から。

①接続要求→②ゲームをセーブ→③セーブデータ転送→④ロード

こういう流れになっています。

特に③まではすべてのクライアントにセーブデータが転送されるまでサーバー側で待つ仕様みたいで、回線速度の遅いクライアントがいるとよけいに時間がかかりますが、余りに遅すぎるとタイムアウトも発生します。

また、④のロードはクライアントすべてのロードを待つわけではなく、サーバーのロードが終わったらそのままスタートとなります。そして、各クライアントは転送が終わるとほかのクライアントのダウンロード完了を待たずにロードを始める感じなので回線速度とマシン性能がそこそこならばだいたいサーバーよりも早くロードが終わって、サーバーのロード完了を待つ形となります。

ここでサーバーのロードよりも遅いクライアントはサーバーに置いて行かれるので、早回しして追いつく仕様です。このときに同期が取れなくなる場合がありました。

 

仮説ですが、ロード直後に線路等敷設の処理が多いとそれだけで同期が取れなくなる可能性が考えられます。検証する気がないのでそんな気がする程度ですが。

 

☆回線の相性について

ほかのネットゲーム等同様に回線同士の相性があります。

単純にサーバーとクライアントの相性もありますが、クライアント同士の相性もあるような気がします。

自分がサーバーを開いていたときの経験ですが、ある人(以下Aさん)と別の人(以下Bさん)が参加していたときの話です。

AさんがログインしていてBさんがログインするとAさんが切断され、Aさんがログインし直すとBさんが切断され…を繰り返していることがありました。

その後、BさんがログインしなくなるとAさんの接続が安定してきました。

実証はしていないので何とも言えませんが、クライアント同士でも相性がある気がします。

 

中途半端かもしれませんがそんなお話でした。

名無しの開発記#08とマップ公開について

ようやく1950年代編も終わりを迎えて白馬の開発もおおむねひと段落です。

www.nicovideo.jp

 

 

f:id:pm1965:20170202225541p:plain

f:id:pm1965:20170202225543p:plain

おなじみな感じのBGMなOPのロケ地です。収録時はまだ本線直通の列車が走っていませんでしたが今では空気輸送な準急が本線から乗り入れてきます。

 

今回は白馬地区のこまごまとした路線を紹介

f:id:pm1965:20170202225825p:plain

 

f:id:pm1965:20170202225828p:plain

横川電鉄の様子。資本的には白馬急行電鉄の傘下に入っているというか会社は白馬急行そのものです。

微妙だった国鉄線をリニューアルして神戸電鉄のような何かにしました。

f:id:pm1965:20170202230106p:plain

f:id:pm1965:20170202230105p:plain

京阪大津線をイメージした桜井鉄道。こっちは国鉄です。沿線には漁港があったりコンビナートもあったりと短いながらも風景の変化が楽しめます。

f:id:pm1965:20170202230323p:plain

国電白馬駅乗り入れ開始に伴って同駅の南側は複雑な交差になりました。白馬国電中央線のテコ入れは姫路線混雑対策の一環だったりします。

f:id:pm1965:20170202230748p:plain

屋上の看板が特徴的な民衆駅を擁する出水。

f:id:pm1965:20170202230802p:plain

見た目重視な都市開発をするために改装された大田駅。結局白馬のあたりしか弄ってないとか言いつつこんな感じの開発もしています。

ということで本編が4回分進んだので再びセーブデータを公開します。

DLは↓のリンクから。

https://1drv.ms/u/s!Avpw5juvqGd9k1TrI_uzieJBF_UZ

次回は動画にできそうな開発ネタがたまったら作ります。

現在新私鉄の建設をやってるので…

名無しの開発記#06と#07について

1950年代編として国鉄幹線系統の整備とこの時代の中心都市として整備してきた白馬を中心に開発してきました。

www.nicovideo.jp

第6回は5回で拡張した白馬駅姫路線乗り場を使って大規模に姫路線を増発と運行系統の整理でした。

姫路線は白馬~宇佐を白宇線よりも遠回りで結ぶ路線で、白宇線の需要をある程度吸収する役割を持っていたりします。

具体的には白馬都市圏のうち西側の衛星都市から宇佐方面へのアクセスを担ったり五城目で接続する白馬急行電鉄線の乗り換えであったり…

実際白宇線が白馬と宇佐から東側の輸送に特化しているのに対して姫路線は宇佐から五城目や西白馬までの客が中心です。

そんな姫路線の沿線を紹介していきます。

f:id:pm1965:20170202205759p:plain

白馬駅より乗降客の多い西白馬駅。この時代はまだ私鉄工事中でした。

f:id:pm1965:20170202205845p:plain

毎度おなじみな五城目駅。ここからごっそり乗ってきて満員になる列車もあって困りの種です。

f:id:pm1965:20170202205956p:plain

八尾駅。独特な配線はもともと普通列車をここで折り返して系統分断する構想があった名残。

f:id:pm1965:20170202210110p:plain

姫路駅。姫路線沿線最大の都市であり、事実上の普通列車の系統分断駅。

自分の中では主要都市のひとつでもありますが、大規模な開発は輸送力を上げるまで難しそうです…

f:id:pm1965:20170202210323p:plain

姫路~十三間の季節の境目。この処理はとても難しいので常冬playはおススメしない。

f:id:pm1965:20170202210511p:plain

複々線に支線が乗り入れるせいで無駄に大きい玉名駅。かつては貨物列車が支線に向かっていた関係でそれに合わせた配線だったが、廃止されてその名残を残しつつもシンプルな配線になっている。

f:id:pm1965:20170202210653p:plain

徐々に大きくなりつつある首里駅。宇佐地区の国電はここから。

 

続いてバイパスな姫路線に対してのメインルートな白宇線とその先のお話。

www.nicovideo.jp

マップを東西に貫く大動脈な白宇+大田本線。今回は中間優等な急行に乗りながら運行形態と沿線を紹介しました。

急行が松浦まで乗り入れるのに対して特急が大田までしか走らないのは需要の高い都市間客を特急に乗せて急行はその補完にあたるためです。

 

f:id:pm1965:20170202211352p:plain

急行の始発駅である松浦駅。大田線の普通列車はここから首里まで運行していて大田線の延長線上にあるようなもの。

f:id:pm1965:20170202211616p:plain

松浦線の亜幹線な感じの区間。割と気に入ってる。

f:id:pm1965:20170202211626p:plain

白馬、宇佐に続く第三の主要都市として位置付けている大田駅。太田じゃない。今は「別のすがた」に変わっている。

f:id:pm1965:20170202211628p:plain

その配線のせいで急行通過駅の稲取駅。大田線のなかでは乗降客の多めな駅。

f:id:pm1965:20170202211630p:plain

宇佐国電東側の始発駅な寺泊駅。急行は止まらない。

f:id:pm1965:20170202211633p:plain

山科的ジャンクション駅のつもりだった関駅。昔は外側優等線内側緩行線のつもりだったが、増発のために内側白宇線、外側姫路線になって無駄な線路がorz

f:id:pm1965:20170202211646p:plain

鶴見線的な路線が出ている西都駅。製鉄を中心とした工業都市なあたりも鶴見っぽい。

 

名無しの開発記#05について

今回は第5回とその前に投降したけど時系列的には第5回のあとになる4.9回です。

なんて言ってたけど、すでに補足というかなんというかを投稿してましたね。

まずは第5回から

www.nicovideo.jp

前半はマップ内のなかでも特徴的な都市のうち未紹介な都市を紹介しています。f:id:pm1965:20170118064639p:plain

農業都市である行橋。Twitterでもよく投稿するくらい中の人のお気に入りですが、そう遠くない将来引っ越す可能性が出てきました。

粗い碁盤の目を作って適当に穀物畑を広げて用水路的なものを引くだけの簡単なお仕事。

とってつけたような役場は市内建築が侵食するのを防ぐためにおいてます。

 

f:id:pm1965:20170118065316p:plain

動画未紹介の双子島な町。本線の駅からトラムでアクセスしています。

 

後半は白馬駅の改装工事です。

f:id:pm1965:20170118065628p:plain

1947年の白馬駅は白宇線ホームも地平で地下がありませんでした。

月35本程度(1/16待機×3)しか発着できないため、ホームの拡張を2回にわけて行いました。

f:id:pm1965:20170118065903p:plain

1951年頃の白馬駅。白宇線ホームだけ重層化しています。

f:id:pm1965:20170118070215p:plain

姫路線乗り場も重層化した白馬駅。これで各線とも月65本(1/16待機×5)程度の運行本数を確保しました。

www.nicovideo.jp

4.9回はその直後くらいの白馬国電の様子です。

#NetSimutrans 主催者のお仕事その2

というわけで前回の続きです

とりあえず開催までの流れを紹介した前回

今回はスタート前からのお話です

人が集まってマップ生成が終わったらスタートです。

参加者が多いと最初のうちはログインラッシュとスタートダッシュが始まります

NSは場所取りが大事ですからね

ルール違反していないかマップ巡視しつつ自分も開発を進めます

産業設置でマップぴょんぴょんしたり、初期に配置されている都市をガンガン取ってったりする人が居たり、他の人の延伸妨害に走る人もいるので要注意です

フリープレイを切ってる場合にはスタートダッシュを決めすぎて自滅する人も居ますが、だいたい放っておきましょう。そういう人はいつもそうですから

スタート直後は揉め事が起きやすいですが、半分くらいは放っておいても解決するので放っておきましょう。それでだめなときだけ介入すればいいです。

あまりマナーのよくない感じのする人は少し頭に入れておきましょう。遅かれ早かれトラブルになりますので

 

スタートが落ち着き始めたら安定してきます。狭くなってきたと思ったらマップ拡張もいいでしょう。

サーバーモードのままではマップ拡張できないのでいったんセーブしてゲームを止めて、通常モードで機動。マップ拡張します。

そのままだと南と東にしか拡張できないので、西と北を拡張するときはマップ回転させてから拡張します。昔と違ってマップ回転ではほぼ落ちませんので安心してください。

マップ拡張が終わったらサーバーモードで再び再開します。通常のSimutransで遊ぶとき同様にセーブデータをロードできます。

自分の場合はゲームを止めたついでにアドオンの追加やwindowsアップデート、ウイルスソフトの更新なども併せて行います。

高度な設定を弄るときもサーバーモードでは直接行えないので、通常モードでロードして、設定を変更した後再開します。

 

マップ内で旅客が溜まってる駅なんかがあったときにはある程度捌けるように促したりバイパスをしてあげたりあきらめたりします。

 

デッドロックはだいたい放っておきましょう。時折バグ由来のロックもありますが、そうでなければ自分て対処できないといつまでもロックさせるので。

 

安定してきたら1日1度くらいのペースでマップ全体を軽く眺めておくとトラブルの予兆なんかもわかってきたりします。

 

次はバグなどの対応を紹介していきたいと思いますがそれはまた今度