OEのサーバーに関して、どうするのかと言う話をメールで聞かれました。
とりあえずはβ版の間は、サーバーはユーザーが設置することになります。
そのあとはこちら側で、準備してもいいかと思いますが、サーバーの設置と言うものは多大な元手が必要なわけで、厳しい面もあるかと思います。
ここで、問題になるのは、既存の普通のサーバーではダメな点です。
サイト上での、新規登録など、によって作成され、データベースにそのまま、PHPやCGIで書きこむと、SQLでファンクションが書いてあるので、ゲームサーバーのデータベースにコピーされる仕組みなのですが、このサイトとDBはおそらく、そこら辺のMySQL,PHP5が使えるレンタルサーバーでも大丈夫です。
(ただし、データベースの作成権が必須なので、おそらく無償のレンタルサーバーでは利用できません。)
ゲーム用のサーバーは、完全に常駐型、及び決められたのポートマッピングが必要なために、この条件に適応できるレンタルサーバーはほぼありえないでしょう。
それに、同一サーバーでも構いませんが、クラスタを構築してその上のゲーム動作となりますので、単一サーバーでは、負荷が重い可能性もあるのです。
また、MySQLのセットアップ、これも必須ですので、初心者には厳しい?面がβ版の間は出てきます。
MySQLなどをインストーラーに組み込めるのなら組み込むことも考えたいですが、おそらくは、著作権などの観点から厳しいでしょう。
ポートマッピングについては、今、ほとんどの家庭で、ルーターが入っているので、ルーターに応じたポート解放が必要となり、これは、プログラム上からやるのはほぼ不可能です。
リファレンスに、有名どころのルーターのポート解放方法は乗せておこうとは思いますが・・・
なお、エディター側で、テスト的にサーバーと同期させるものを作ってみようかと思います。
OE内で作成する通信処理の9割5分は、ランタイムからサーバーもしくは、サーバーからランタイムになります。
その中でももっと大変だと言える点は、アカウント認証、チャットはTCP、それ以外はUDPで作るべきだという点です。
TCPで、キャラの歩行や、銃の発射したというイベントを送っていれば、確実にクライアントか、サーバーがついていくことができません。
UDPを使う、だけど確実に情報を相手に届ける、これも、また問題なのです。
今現在、ファイルフォーマットの決定について悩んでいる最中に、パケットの中身についても検討する必要性があります。
エディター側で、ユーザーがパケットを定義できるようにもしなければなりません。
パケット通信のアルゴリズムも、サーバー内では、Naggleアルゴリズムを利用して通信、クライアントと、サーバー間は、対話式の通信をさせるためには、MTU(最大通信単位)を考えた上で、パケットの通信単位を決めなければなりません。
パケットには、パケット長、パケットヘッダ、データ、エンドマーカーの順番で送られます。
パケットの最大長、1500オクテットから、データ以外の部分(5,60オクテットぐらいって仮定)を差し引いて、1450オクテット分のデータ容量を確保します。
1450オクテットってどのくらいなんだろうか・・・
自分でも言ってて考えがつかない
そこで調べてみた。
1450オクテット=(ほとんどのコンピューターでは)1450バイト=(文字コードがShift_JISだと仮定すると)半角カナなら、1450文字、全角なら、725文字。
パケット内はすべてテキストデータと言う場合ですが、1パケットで大体のデータは送れるようになるという事がわかります。
ほとんどの場合、1パケット1変数と言うわけではないですが・・・
データベースの中身、パケットの中身、ファイルフォーマット、決めなければいけないことが多くて作業が進みにくいです。
とりあえずは作業頑張ります。
[2回]
PR