2021/12/15 よりサイトリニューアルしました

【オンラインゲームの仕組】「クライアントサーバーの完全同期型と非同期型」それぞれの特徴と動作原理

オンラインゲーム

周りでオンラインゲームをやっている人が増えてきました。若い層です。

私も過去に「ドラクエ10」、いわゆる「MMORPG」(大規模多人数同時参加型オンラインRPG)を毎月課金してやっていましたが、それ以降はオンラインゲームに手をつけていませんでした。

最近では「FPS」(主人公と同じ視点で操作するスタイルの3Dアクションシューティングの総称)等が流行っているそうです。

「ツールドフランス」がコロナの影響で「バーチャル化」されて競技されたりもしています。これもオンラインゲームですよね。

そこで、個人的に気になったのが、なんとなく分かっていたつもりの「ネットゲームの原理」についてです。

みなさんも気になった事があると思いますが、「ネットゲーム」のくせに、クライアントの端末に「ソフトをDL」しなきゃいけなのは何故か?とか、どうやって複数人が画面上に映し出されるのか?とかの初歩的なことです。

調べてみると、色々方式等が存在するようで、初歩的な事だけでも覚えるとけっこう為になります。

今回はそれらの「オンラインゲームの仕組み」について、簡単にまとめてみたいと思います。

初めに

ゲームクライアント

オンラインゲームといっても、ゲームの内容全てをサーバー側で処理する事になればサーバーがパンクしてしまいます。ネットワーク環境も然りですね。

したがって、クライアント側にもオンラインゲームのソフトをDLさせておいて、基本的な内容についてはクライアント側のデータを利用して負荷を分散させているんです。

これを「ゲームクライアント」と呼びます。

クライアントサーバー型

オンラインゲームの接続方式は主に「クライアントサーバー型」であり、「完全同期型」と「非同期型」の2つがあります。それぞれの特徴をまとめます。

完全同期型

ここで言う「同期」というのは、クライアントとサーバー間の一連の動作のタイミングを合わせる事です。

完全同期型では、「1フレーム単位で完全に同期させる」のが特徴です。

例えば、ゲームのFPS(フレームレート)が60とすれば、1秒間に60回同期をとることになります。計算すると、一回の同期の時間(1フレーム)は1.6666msになります。

つまり、常にこの1.6666msの間に、クライアントからのリクエストに対して、サーバーが答えを返す動作のタイミングが取れているので、「動きのズレ」などが発生しにくいんですね。

ただし、 「1フレーム単位で完全に同期させる」という都合上、比較的に情報量が少なくなければ実現出来ません。(1.6666msの間に多くのデータのやり取りができない。)

したがって、これは「参加人数が少ない」とか「表示させる範囲が狭い」などの、「格闘ゲーム」「ターン制のゲーム」などに採用されやすいみたいです。

非同期型

非同期型では、「数フレームで同期」するのが特徴です。

例えば「MMO」や「FPS」のオンラインゲームであれば、表示させる範囲が広く、またキャラクターも多数反映させなければなりません。情報量が莫大になってしまいます。

情報量が多くなるにつれ、フレームに対しての処理が追いつかなくなり、1フレームでの同期は困難なので、「数フレームでの同期」をする事になるんですね。そして、同期にずれが生じます。

つまり、莫大な情報量を処理すべく「多少のズレはやむを得ない同期」の方法になります。

移動中に少しワープしてしまったり、周りのキャラクタが一部反映されなかったりがありますが、極力ゲームに支障のない程度に抑え、「重要な場面では同期がずれない」工夫がされています。

通信プロトコル「TCP」「UDP」

コネクション型の「TCP」

TCPの通信プロトコルは、信頼性の高い通信を実現する事が出来ます。

例えば伝送するデータがうまく相手に届かなかった場合、再送するなどして元のデータに復元させます。これを「TCP通信」と呼びます。

届かなかったデータを再送するのに時間はかかりますが、宛先で元のデータを再構築できる信頼性の高い通信になります。

これを「コネクション型」とも呼びます。

情報量が少ない、またはリアルタイム性が要求されないネットゲームであれば、このTCP通信が使われるはずです。

また、前途した非同期型の「重要な場面」などですね。遅延が発生しても確実に表現させたい場合には、TCPが利用されます。

コネクションレス型の「UDP」

UDPはTCPと逆で、届かなかったデータ(パケット)は無視して通信を行います。

つまり、元のデータが宛先で完全には復元出来ない可能性があるけども、再送しない分スピードが速いのです。WEB電話で利用されているのは有名ですよね。少しの音飛びよりも、リアルタイム性が重視されている場面に最適なのです。

したがって、ネットゲームでは膨大な情報量をやり取りし、かつリアルタイム性が重要視される「MMO」や「FPS」などで利用されています。

UDPは「コネクションレス型」と呼びます。

クライアントの端末性能と通信環境

レイテンシとレンダリング

クライアントがPCとして、その性能が弱ければ、レンダリング(一定の処理や演算を行って画像や映像、音声などを生成すること )に時間がかかったり、通信環境が悪ければレイテンシ(遅延)が大きくなったりします。

どちらもゲームの動作に影響を及ぼすので、オンラインゲームを快適に楽しむには、性能の高い端末や、高速な通信環境が必要です。

まとめ

・ゲームクライアントはサーバーの負荷分散

・完全同期型は「1フレーム単位で完全に同期させる」(格闘ゲームなど)

・非同期型は「数フレームで同期」(MMOなど)

・データの規模やリアルタイム性によって通信プロトコルを使い分ける

・クライアントの性能、環境はもちろん影響する

ゲームをプレイする方は単に性能の良い端末と環境をそろえるだけですけど、ゲーム作る側はめちゃくちゃ大変でしょうね。サクッとまとめたこの内容だけでも、サーバーの環境を構築するのはすんごいスキルが必要だと思います。

本物のエンジニアってのは、こういう仕事に携わってるような人を言うんでしょうねきっと。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です