クライアント同士の同期

クライアントとサーバがデータをやりとりするだけで済むシステムもあれば、クライアント同士がデータを共有しなければならないシステムもあります。
例えば、一人でプレイできるようなゲームであれば他のクライアントとデータを共有する必要はありませんが、二人で協力プレイや対戦プレイをするようなゲームでは、他のクライアントとデータを共有する必要があります。

クライアント同士を同期させる仕組みのポイント

そのようなシステムを組む際に重要なポイントとなるのは「単一プロセス内でしかアクセスできない値を使って処理してしまわないこと」、つまり「変数に格納した値を使って勝手に処理しきらないこと」です。

例えば以下のようなプログラムを組んだとします。

  1. クライアントからのデータを受信
  2. 受信したデータを処理して返信

これだとこの処理が終った後「サーバがどのようなデータを受信し、返信したのか」が誰にもわからなくなってしまいます。
そこで、データを返信する際の処理は、受信したてのデータを使って処理してしまうのではなく、必ず共有データを使って処理します。

  1. クライアントからのデータを受信
  2. 受信したデータを、他のプロセスにも共有できる形(ファイルなど)に保存
  3. 共有データのみを使って処理を行い、返信

このように、他のプロセスにも共有できる形に一旦保存し、その保存したデータのみを使って返信する仕組みにさえすれば、「サーバがどのようなデータを受信し、返信したのか」をプロセス後も残るため、複数クライアントのデータのやりとりが可能となります。

クライアント同士を同期させる仕組みのアーキテクチャ

以上を踏まえると、以下のようなプロセスになります。

アーキテクチャ

データの処理を行うプロセス5と6の前に、データを共有するためのプロセス4を加えることで、クライアント同士の同期を可能にします。

Copyright © 2006 Hikijishi All Rights Reserved.
[] [ajax][0.0018610954284668]