サーバでは、処理を高速化するため、可能な限り短いコードを使います。
これを【最適化】と呼んでいます。
まず一般論から…。
クライアント&サーバシステムではクライアントで可能な処理はクライアントで行い、
重要な処理だけをサーバで行います。
これをゲームを例に解説すると…。
@ プレイヤーがモンスターにアタック
この時、自キャラ座標と対戦相手のモンスターのID、武器なら武器ID、魔法なら魔法IDが
サーバに対して送られます。
Aサーバは与ダメと被ダメ、勝敗情報を返します。
他の情報は必要がない限り返されません。
B受け取った情報に対し、グラフィックやサウンド処理が行われる
説明するまでもなく、読者様が見ている画面に結果が出るという事です。
で、注目すべきはAなのです。
「何に対し何でどういうアタックをしたか」しか処理されないのです。
もちろん勝てば勝った時の処理、負ければ負けた時の処理になりますが。
この戦闘において、クールタイムだとか攻撃距離などは扱っていない点に注意です。
実はクールタイムや攻撃範囲はクライアントで処理可能であるため、
サーバでは そこまで扱わないのです。
正確に言えば、サーバ側の処理を稼ぐため、付随した処理はクライアント側で
行われているという事なのです。
もちろんサーバ側で処理する事も可能ですが、
転送データ量や処理時間の関係で細かな処理を省くのが一般的なのです。
ゲーム中に異様にクールタイムの短いキャラや、異常に射程距離の長いキャラを見かけます。
それはクライアントの不正な改造によって、クールタイムや射程距離のパラメータが変更されたからです。
本来であれば、そのような細かい事までサーバ側で処理すれば、このような不正は起こりません。
ところが、サーバ側で細かい処理を行うとラグが大きくなりゲームにならなくなってしまいます。
そのような理由から、クライアントで処理の一端を請け負う事でシステムが成立しているのです。
さて…。
クールタイムや射程距離など本来はサーバ管理であるべきだと思いますが…。
サーバ管理にするとサーバの負荷が大きくなってゲームにならなくなってしまうんですよね。
この「クライアントに処理の一部を任せる」というのはサーバから見れば「手抜き」とも言えるのですが…。
読者の皆様はどういう感想をお持ちになりましたでしょうか?
そして、それが原因でチートプレイヤーが居なくならないのですが…。
次回はイベントの実装について考察を加えてみたいと思います。
|