なぞ

<ワカンナイ>

初代AC系熱帯サーバの仕組み

今日は現行のAC1.x熱帯サーバの仕組みについて語ります。

最初はすごくスマートな方式をとるはずだったのに、

どうしてこうも複雑化してしまったのか、経緯とか裏話的なものとなります。

 

まずはじめ、4月の終わりごろかな。

ひょんなことからACPPのネット対戦をやってみたいと考え、

現状を知るところからはじめました。

その際には以下のような制約がありました。

・現状でもネット対戦は可能だが、分割対戦モード(スタンドアローンモード)

・対戦するにあたってはポートの解放が必要

・対戦環境(エミュレーターや設定など)を一致させる手間がある

 

などなど。

約10年以上前の知識とまったくかわっていませんね。

進歩があったと感じられた点としては、

ネット対戦に使用するカイレラがP2P接続に対応した点くらいです。

苦しい、と思ったのはいまだに分割対戦モードで対戦が行われていることでした。

これでは、相手の画面が見えてしまうことにより、

ゲーム性が全然別の物になってしまう上、選べるマップなども少なくなってしまい、

本来のゲームの楽しさが大きく損なわれてしまうからです。

 

そこでまずは、この部分を解決することからはじめよう、ということで

PS1のエミュレーターで比較的動作が安定していて、

かつ『シリアル端子』をサポートしているエミュレーターを探しました。

でもこれは速攻で見つかったんですよね。

その名も「PCSXR(派生版)」。

f:id:syedream:20170610171511p:plain

これがシリアルポートでの通信をサポートしていて、

TCP/IPで通信させることにより、エミュレーター同士をリンクさせて対戦ができる!

実は、もうこの時点で勝ちを確信していたのですが、

いざPCで動かしてみると・・・通信のエミュレーションがものすごく重たくて、

FPSが40程度しかでません。

普通のギガイーサ(1000Base-T)では同期をとるのに間に合わず、

10ギガビットイーサ(10GBase-T)が必要なほどです。

これでは熱帯どころか、家でPCとPCを接続して対戦するのも現実的ではありません。

 

そこで、考え付いたのがPCの仮想化。

これならば、サーバーとなるPCの性能には依存してしまいますが、

仮想PC同士は、フルスピードでTCP/IP通信が可能なので、

対戦自体は実機と同等の速度での対戦が可能なのです。

(処理落ちのエミュレーションが完璧ではないので、実際にはエミュレーターのほうが動作がはやいですが。)

 

そこでさらに考え付きました。

この仮想PCに画面の転送機能と、キー情報の入力ができるようにすれば、

ネット対戦環境の出来上がりなのでは・・・と。

近年のリモートデスクトップソフト(MS純正Win10仕様)では、

0~2ms程度で画面の転送、および操作情報(キー入力)が完了できるほど、

高速なものになっています。

なので画面の転送の部分に関しては楽にクリアできました。

一般的な光回線での通信では約10ms~30ms程度の遅延で双方向の通信が可能ですが、

それに加えて画面の描画部分が遅くて2ms程度ですから、 ほぼほぼ誤差の範囲ですね。

ただし、現状売られているWindows10が必須なのと、

PCに搭載されているグラフィックス機能でH/Wエンコーダーが有効な環境でなければ、

高速な画面描画ができないという欠点もあります。

ここはもう、対戦したい方はがんばって用意していただくしかない部分になります。

また、回線に関しても調査しましたが、

実測値にして5~10Mbps程度の低速な回線では、画面のカクツキや、

操作の遅延などが頻繁に起き、ゲームになりません。

15Mbps程度から安定しはじめ、30Mbps以上の速度からはじめて、

理想的な操作ができるようになると思われます。

回線速度計測サイトで計測し、30Mpbs出ていない回線では厳しいとお考えください。

なお仮想PC側の回線速度は800Mbps程度とかなりの余裕を確保できているので、

将来的には対戦台を増やす方向で考えています。


次にコントローラー(キー入力情報のやりとり)ですが、

これは上記のリモートデスクトップを利用して送信しつつ、

JoyToKey」というソフトを利用し、パッドの操作をキーボード入力に変換する形で

やりとりさせることにしました。

これならば、一度クライアントとなるPCにソフトを導入し、設定さえ済ませてしまえば、あとは仮想PC側のエミュのキーコンをするだけで簡単にゲームのプレイが可能となります。

 

そして最後になりましたが、音声の伝送です。

これも実はリモートデスクトップ側に機能が含まれているのですが、

最新版のリモートデスクトップの画面描画が高速化している反面、

音声の伝送は旧来の速度から上がっておらず、音が遅れて聞こえる事象が起こります。

そこで「brynhildr」という別のリモートデスクトップソフトも併用する方式にしてます。 当然リモートデスクトップソフトなので、こちらのソフトにも仮想PCの画面が映ってしまいますが、描画に関しては前述のMS純正のリモートデスクトップのほうがはるかに高速で行われるので、画面は最小化してしまい音声の伝送機能だけ利用することにします。 しかしこうなると、音声がリモートデスクトップソフト二種から同時に出力されることになるので、クライアントPC(お使いのPC)側の音量ミキサーで、「リモートデスクトップ...」をミュートしてください。 

f:id:syedream:20170610171241p:plain

(画面下部のスピーカーアイコンをクリックして赤いマークを付ければOKです)

 

仕組みとしてはこんな感じかな。

ただ現状ではもいくつかの問題があって、それを羅列すると・・・

・サーバーの性能不足により、ゲームが常に処理落ちしてしまっている

・ネット回線への依存度が強く、安定した回線を使っていないと操作に支障がでる

・クライアントPC(リモートデスクトップ接続をする側のPC)にも性能が必要

・Windows10が必要

・テスト不足により、予期せぬ問題が発覚する可能性がある

 

などなど。

特にネット回線や対戦に使うPCにもある程度のスペックが要求されるようになってしまった点が、大きな問題として立ちはだかります。 ノートパソコン程度で対戦できていた旧来の方式のネット対戦と比較すると、かなり敷居が上がってしまいました。

対戦に使われる仮想PCおよび、それをコントロールするサーバーの負荷状態ですが、これもかなり高い値がでてしまっていて、現状では、サーバーと仮想PCを一対で接続する分にそこまで極端な処理落ちはしないものの、仮想PC1と仮想PC2を同時に起動した際の負荷がかなり大きく、現在仮にしぇPCをサーバーとして運用していますが、対戦専用機を用意しないと厳しい、という現状が見えてきたところです。

 

また、テスト不足により不測の事態が起こることも十分に考えられます。

現状では4人でしかテストできていないため、正常に動作すると断言できる環境が非常に限られています。 また4人中、回線の状態とPCの状態の双方が良好と判断できる方は1名のみとなっており、ちょっとこのままの状態でサーバーを新調しても、ついてこられる人がいないという事態に陥ることを危惧していたりします。 PCは買えばすぐ使えますが、回線などは手続き含めて面倒ですから・・・。

 

現状はこんなところです。

人が集まるようであれば、来月にもサーバーを新調、同時にDiscordの対戦コミュニティも公開してしまおうと考えていますが、はたして・・・。