◇REVOKE world Online −通信仕様策定−

◎通信方式は何を使用するか?

最近はセキュリティ上余計なポートを開ける事は好ましくない
httpのみを使用して行うのが良いだろう

・httpのメリット
サーバに新しいアプリをインストールする必要が無い
余計なポートを開けて、ハッカーの侵入を許す隙を与えない
ユーザに追加設定を促す必要が無い

・httpのデメリット
サーバ処理が重い
コネクションが毎回切断されるので、クライアントからポーリングが必要になる

◎どのようにアクセスするのか?

URLの後ろにパラメータを付けてGETにて行う

一般的にPOSTの方が良いとされるが、どんな方式を取っても暗号化されていない以上は不正なアクセスは行われます
URLの後ろに付いているパラメータはログに保存されるので、変な事されたら一目瞭然で良い

◎どのくらいの間隔で行うのか?

間隔が短いとバックボーンビジーになるし
長いとゲームの反応が遅くなる

通常移動は1マス2秒
高速移動は1マス1秒
と考えると、最低1秒に1回アクセスが必要になる

ゲームルールを追加する事で、通信間隔を長くする
例えば、SQL発行には5秒のコストがかかるとすると
SQL入力→発動間に5秒のラグがあるので、通信間隔をのばす事ができる

・ルール案
SQL発行を8秒として、通信間隔を8秒にしてはどうか?
8人同時対戦なので、単純計算で1秒1アクセスサーバーに来る事になる

・ルール案
10秒に1回、入力締め切り時間を設ける
そのシグナルを考慮して移動距離などを決めてコマンドを発行する

・ルール案
トークンリング制をとり、今誰の番なのかを画面に表示する
順番にバトンが渡されていき、自分の番が回ってきたらSQLを発行できる

こんな感じで,色々な案を考え,その中から適しているものを選択する

◎SQL処理タイミング

8秒に1回サーバーとのアクセスを行うとすると、他のプレイヤーの情報を受け取るのもその間隔と言う事になる
ゲームルールとして、それで問題が無いように定義する

うまく通信ができれば、以下のようになる
01.プレイヤ1通信
02.プレイヤ2通信
03.プレイヤ3通信
04.プレイヤ4通信
05.プレイヤ5通信
06.プレイヤ6通信
07.プレイヤ7通信
08.プレイヤ8通信
09.プレイヤ1通信
10.プレイヤ2通信
...

自分が通信を行った際には、
・他の7人のSQLを受け取る
・前に自分が入力したSQLが全員に配られている
状態になっているはず

これを考慮して、SQL発動タイミングを決めると
01.プレイヤ1通信。プレイヤ2SQL発動
02.プレイヤ2通信。プレイヤ3SQL発動
03.プレイヤ3通信。プレイヤ4SQL発動
04.プレイヤ4通信。プレイヤ5SQL発動
05.プレイヤ5通信。プレイヤ6SQL発動
06.プレイヤ6通信。プレイヤ7SQL発動
07.プレイヤ7通信。プレイヤ8SQL発動
08.プレイヤ8通信。プレイヤ1SQL発動
09.プレイヤ1通信。プレイヤ2SQL発動
10.プレイヤ2通信。プレイヤ3SQL発動
...
とする事で、SQLが全員に伝わった時点で実行できる事になる

・通信エラー対策
8秒に1回と言っても、インターネットを介する以上、必ず遅延やロストが発生する
そこで、発動するSQLは2つ前に送信したものとする
つまり、01で送信したものが08で発動するのでは無く、その次の15で発動する事になる

SQL入力から発動まで15秒かかるといったところか
8秒に1回SQLが入力できるので、次の次を見越して予めSQLを入力しておく必要がある
まぁ、そういう戦略が取れると言うルールと言う事で('-'*)

◎送信内容

プレイヤ番号、今回のSQL、前回のSQL
みたいな感じのものをサーバーに送信する

内容は予め決めておかなくても,必要なものを追加する形で良いと思います


トップメニューソフトメニューREVOKE world Online