ファイナルファンタジーXIの仕組み(前編) | すーぱーSEへの道

ファイナルファンタジーXIの仕組み(前編)

マイニングとかデータウェアハウスとかの話ばかり
書いていると『よくわからん(-_-)』という方も出てくると
思いますので、たまには身近なゲーム関連のお話を書いてみます。



FFXIリネージュなどの、サーバに接続して多人数で遊ぶ
大規模オンラインRPGのことを総称して、MMORPGと言います。
(Massively Multiplayer Online Role Playing Game)


FFXIはスクウェア・エニックスがサービスとして提供し、
ユーザー数55万人、同時接続人数は最大17万人にもなります。

毎日遊んではいるものの、どういう技術でこの仕組みが
実現されているかを理解している人は少ないと思います。

日経ネットワーク2005年2月号に、
このMMORPGの仕組みを紹介する記事が載っていましたので、
私なりの解説を交えながら簡単に紹介します。





FFXIは、クライアントサーバ型のシステムです。

クライアント(ユーザーのパソコン)
サーバ(スクエニのサーバ)

の連係でシステムを構成します。


プレイヤは、パソコンのマウスやキーボードを使って、
ゲーム中のキャラクターを操作します。

しかし、ただ単純にパソコンの画面に
操作結果が表示されるわけではありません。

このような流れで、処理が行われます。


 1.プレイヤの操作情報をサーバに送る

 2.サーバは送られてきた全プレイヤの位置や
   ステータスを管理し、すべてのプレイヤの操作内容を
   計算してから、結果を個々のプレイヤに返信する。

 3.クライアントはサーバからの返信をもとに画面を表示する。


基本的にはこの一連の処理を繰り返しているだけですが、
この処理を短時間で済ませないと、キャラクターの動きが
ぎこちなくなったり、コマ落ちが発生して快適に遊べません。

メールやファイルの転送などでネットワークを使う場合は、
送受信の時間にばらつきがあってもそれほど影響は出ませんが、
MMORPGの場合はそれが致命傷となります。


たとえば、

 ボスキャラと戦っている最中にネットワークが重くなって、
 処理が返ってきたと思ったらすでに全滅していた。

なんてことがあっては、誰も利用してくれませんよね。
(初期のネットワークRPGだとこういう話がタマにありました)


FFXIでは、ネットワークレスポンスを向上させるため、
UDPという通信上の仕組み(プロトコル)を使って
クライアント-サーバ間の通信を制御しています。




ネットワーク関係の用語解説をしときますと、
TCP/IPでよく使われるプロトコルにTCPとUDPがあります。

TCPはデータが相手に届いたかどうかを確認しているので、
途中でデータが失われた場合には再送信が行われます。

メールやファイルのダウンロードなど、必ず相手先に
データを届けなければいけない場合に使います。


UDPは相手に届いたかどうかの確認も無ければ
データを再送信することも無い、送りっぱなしの送信方法です。

TCPに比べ、UDPは確認手順を省略できるため、
高速なデータ送受信に向いています。

ストリーミングビデオ再生などがこの方式です。
途中で一部のデータが欠けても、雑音が少し入ったり
画像がコマ落ちしたりする程度でそれほど影響が出ません。





FFXIでは、このUDPを用いてレスポンスを向上させています。

しかし、UDPはデータが途中で失われても再送信を行わないため、
『サーバ→クライアント間』でデータが失われた場合は、
結果情報が画面に反映されなくなってしまいます。

そのため、FFXIではサーバからのデータを時間内に
受け取れなかった場合、クライアント側で予測処理を行い、
欠けた分のデータを補完する
仕組みになっています。

これがあるおかげで、ネットワークが一時的に重くなっても
スムーズにキャラクタ達が動いてくれるわけです。


<長くなるので次回に続く。。。>