2011/03/10

ブラウザーゲーム開発のための事前調査

ブラウザゲームおよびネットワークゲームを作るために必要な基礎知識を調べてみた。
まだ実装まで試したわけではないので、何らかの足りない情報、間違っている情報が含まれているかもしれないので注意。

構成






Webアプリケーションの開発のためにはソフト・ハードの要件として以下の項目を最初に決める必要があります。



  • クライアントサイドスクリプト

  • サーバーサイドスクリプト

  • Web(HTTP)サーバー

  • APサーバー(CGI or スクリプトエンジン)

  • DBサーバー

APサーバーが決まれば自動的にサーバーサイドスクリプトも決定されますが、
以降は調査結果全般を記述し特に組み合わせについては言及しないものとします。
また、一般的に負荷分散を行うためのロードバランサーやWeb、APサーバーの冗長性の確保、ログサーバーやキャッシュサーバー等の構成を考えない必要最低限の構成です。

クライアントサイドスクリプト







  • javascript(+jquery等のライブラリ類)

  • Flash(ActionScript+javascript)

  • VBScript

クライアントサイドスクリプトはブラウザ上で動作することが可能な状態であることが条件です。
JavaScriptのメリットデメリット


#JavaScriptのメリット

  • JavaScriptを標準実装しているブラウザであれば動作する。

  • 動作が比較して軽い

#JavaScriptのデメリット

  • 動的(画像の複雑な変形や画面全体でアニメーションするよう)な実装が困難。

  • JavaScriptはブラウザの実装により挙動が異なる。

Flash/ActionScriptのメリットデメリット

#Flashのメリット

  • ActionScriptの方が動的でデザイン的に美しい描画が実現しやすい傾向にある。

  • FlashはPlayerが最新版であるという前提なら全て同じ表示・挙動を行える

#Flashのデメリット

  • FlashPlayerをいれないと動作しない

  • ActionScriptから直接JavaScriptを記述して一部の処理を代替する必要があり、言語の習得コストが2倍になる可能性がある

  • Mac製品では基本動作が保証されない。

  • AndroidなどのPCと比較して非力な形態端末だと動作しない可能性がある。

開発環境面で言えば、javascript&CSSはFireBug等の無料ツールで開発できるのに比べ、Flash側は専用の作成ソフトを買わないと開発が難しいという側面があります。
また、Flash内で戦闘処理、スコア計算などは可能ですが、Flashファイルフォーマットは難読化は可能ですがほぼそのまま逆コンパイルが可能です。
これはjavascript側にも言えることですが、最終的な結果・スコアをサーバーに投げる形にすると、敵のパラメーター・戦闘結果・スコアの改ざんが簡単に行われてしまいます。
よって、クライアントサイドスクリプトはユーザーインターフェースの提供のみに何を使用するか?を考えることになるでしょう。

結論としては、ユーザーに導入障壁をどれだけ設けてもいいかと、開発ツール導入の環境をどれだけ設けるかによります。
総じてコストの重さとしてFlash>JavaScript+CSSの関係になるようです。

サーバーサイドスクリプト





  • PHP

  • Perl

  • Ruby_on_Rails

  • Python

  • JSP

  • ASP

  • C/C++

これは標準入出力が使用できるプログラム言語であれば何でも使用可能です。
しかし、文字列処理が得意な言語を可能な限り選択してください。
最低限正規表現の記述が可能な言語、もしくはライブラリが提供されていることが望ましいです。
どうしても高速したい部分のみC/C++等の速度が速いネイティブコードで実行するという形で検討するべきでしょう。

ただし、中間スクリプトの場合はスクリプトエンジンの導入が必要です。(■APサーバー参照)
JSPについてもJavaVM+JavaEEが導入されていないと動きません。(ASPも同様)
C/C++はそのまま実行できますが、CGIは1ユーザーに呼び出されたら1プロセス作成するためにプロセス数がネックになることが考えられます。(FastCGI等で回避事態は可能)

Web(HTTP)サーバー





  • Apache

  • nginx

  • Tornado

  • IIS

基本としてHTTPプロトコルの要求に応じて応答処理を行うデーモンです。
必要であればCGI経由、もしくはWGSI等のモジュールを通して各スクリプトを実行の手続きを行います。
サーバーソフトによっては使用できるAPサーバーが制限されますが割愛します。

APサーバー





  • Tomcat(JSP)

  • PHPエンジン(PHPスクリプト)

  • Perlエンジン(Perlスクリプト)

  • Rubyエンジン(Rubyスクリプト)

  • Pythonエンジン(Pythonスクリプト)

  • ASPエンジン(ASPスクリプト)

APサーバーはスクリプト、アプリケーションの実行環境を指します。
サーバーサイドスクリプトの決定=APサーバーの決定と認識していただいて問題ないかと思います。
また、各エンジンの上に言語固有のフレームワーク等が追加されるケースが多いですが、全て調査するのは困難なので割愛。

DBサーバー





  • MySQL

  • PostgreSQL

  • Oracle(有償)

キャラクターのデータの保存、登録ユーザーID,パスワードによるログイン制の実装等の何らかの記録が必要な場合にはDBサーバーを導入する必要があります。
また、画像サーバーを用意しない場合はDBにバイナリとして登録して動的に読み出す方法を取るので必要になります。
DBへの接続を考慮する場合、サーバーサイドスクリプトも標準で接続処理が実装されているか、ライブラリが提供されているかを考慮する必要があります。

開発事例


大規模ブラウザゲームの代表例として、「ブラウザ三国志」が以下の構成で作成されている資料が検索で発見された。

標準的なLAMP構成(Linux + Apache + MySQL + PHP&APC )で実装されている。

上記で示した形に整形すると以下になる。

  • クライアントサイドスクリプト : javascript + CSS

  • サーバーサイドスクリプト : PHP&APC ( APCはPHP本体に付属する中間コード、キャッシュ等の最適化・高速化モジュール )

  • Webサーバー : Apache

  • APサーバー : PHPスクリプトエンジン

  • DBサーバー : MySQL

[ 参考URL ]
PHPで大規模ブラウザゲームを開発してわかったこと

0 件のコメント:

コメントを投稿