幾度とない延期と様々な紆余曲折と山鬱の妄言珍言を経て2010/11/24にようやく発売されたグランツーリスモ5ですが、のっけからサーバ障害が発生しています。
http://www.gran-turismo.com/jp/news/gt5/d11128.html
『GT5』はオンライン対戦やコミュニティ機能のご利用の際だけでなく、ゲームの起動やGTモード内の画面表示などでも随時オンラインにアクセスする仕組みとなっているため、オンラインの混雑が通常のオフラインのゲームプレイにも影響を及ぼす状況が発生しております。
以下のような現象が起きた場合には、一時的に「プレイステーション 3」(PS3R)をネットワークに接続しない状態で『GT5』をプレイされることをおすすめいたします。
●これらの画面で操作可能になるまでに数分以上かかる
・ゲーム起動直後のオープニングムービー開始前
・ゲーム起動完了後のトップ画面
・GTモード内の各種画面
●これらの操作をしたときに、結果が得られるまでに数分以上かかる
・オープンロビーに入った際のルーム一覧取得
・ルーム内で参加者リスト内のIDを押した時のメニュー表示
・コミュニティでの掲示板書き込み
以下のような現象が起きた場合には、一時的に「プレイステーション 3」(PS3R)をネットワークに接続しない状態で『GT5』をプレイされることをおすすめいたします。
●これらの画面で操作可能になるまでに数分以上かかる
・ゲーム起動直後のオープニングムービー開始前
・ゲーム起動完了後のトップ画面
・GTモード内の各種画面
●これらの操作をしたときに、結果が得られるまでに数分以上かかる
・オープンロビーに入った際のルーム一覧取得
・ルーム内で参加者リスト内のIDを押した時のメニュー表示
・コミュニティでの掲示板書き込み
過負荷によるサーバ障害だけであれば、この規模のゲームですから珍しくはないことですが、問題は次の部分です。
> オンラインの混雑が通常のオフラインのゲームプレイにも影響を及ぼす状況が発生しております
グランツーリスモ5およびPS3を持っていないので想像(妄想)になりますが、動作状況を見るに、ネットワーク関連の処理を非同期で行ってないプログラミングを行っているのだと思われます。
PHPやPerlといったライトウェイト・ランゲージは、基本的にシングルスレッドで動作しています。
この動作にはメリットとデメリットがあります。
一番のメリットは何と言ってもわかりやすいこと。
なにしろプログラムを書けば書いた順に動作するのですから、作るのもデバッグも簡単です。
逆にデメリットも、書いた順番にしか動作しないことです。
敵の弾が動いている間は自機が動けないゲームとか困ってしまいますね。
(※がんばればマルチスレッドも同時動作もできるけど今は考えない方向で)
それに対してAndroidのJavaやiPhoneのObjective-c、XNAのC#といった言語はマルチスレッドで動作を行うことができます。
敵弾を動かす処理と自機を動かす処理、衝突判定を行う処理なんかを同時に動かすことができるのです。
もちろんデメリットもあり、最大のデメリットは動作の順番がわからないことです。
A→Bの順で動く想定でプログラムを組んだとしても、特定の操作を行ったときにだけ稀にB→Aの動作をしたりするといったことがおこり、デバッグが非常に困難になったりします。
WiiにPS3、XBOX360といったゲーム機も当然その機能を持っており(というか持ってないとゲーム機と言えないレベル)、ネットワーク越しの処理などはバックエンドで非同期に行うことが普通です。
すなわち、まず画面を描写して、別スレッドでネットワークに接続するコマンドを投げ、そのコマンドに返答が帰ってきたら結果を動的に挿入する、といったものです。
オンラインランキング表示などを見るとわかりやすいですが、できのいいプログラムでは、まずランキング欄は空のまま画面が描写され、その状態で操作も可能で、その後でデータを受信したらランキングが埋まるという動きになります。
逆に出来の悪いものはローディング画面のまま操作も受け付けず、ランキングを受け取ってからようやく画面全体が表示されるという動作になります。
ランキングのデータを受け取るまでにかかる時間は一緒でも、体感速度は前者の方が圧倒的に早くなります。
まあ、更に出来のいいものではランキング画面に行く前に予めランキングデータを取得しておくなんてのもあるかもしれませんが。
さて、グランツーリスモ5の動作を見ると明らかに後者。
タイトル画面に行くときにまずネットワーク接続情報を確認し、オンライン状態であればサーバに接続しに行き、その結果が帰ってくるのをメインスレッドで律儀に待ち続ける、という作りになっていると思われます。
数分で次に進むのはコマンドのタイムアウトだと思われます。
ぶっちゃけありえない。
何処の素人だよ。
何年も何やってたんだこいつらは。
好対照としてバトルフィールド・バッドカンパニー2を上げてみます。
タイトル画面の右下に最新情報が表示されるのですが、こちらはサーバに接続できないときは単に何も表示されないだけという動作になります。
タイトル画面とは別スレッドで最新情報の取得・表示を行うプログラミングがなされていると推測できます。
つうか、オンゲじゃこの程度常識だろ。
なんで専門外の俺ですら知ってることができてないのやら。
PR
トラックバック
トラックバックURL: