(57)【特許請求の範囲】
【請求項１】
ゲーム空間内の複数のエリア各々を担当し、前記エリア間を移動可能な複数のオブジェクト各々の状態を示すオブジェクト情報を管理する複数のサーバを有するゲームシステムの１つの前記サーバであって、
前記オブジェクト情報を記憶するオブジェクト情報記憶部と、
前記オブジェクト情報記憶部に記憶されている前記オブジェクト情報のうち、担当する前記エリア内に存在する前記オブジェクトの前記オブジェクト情報の更新を行う第１の更新部と、
前記複数のサーバの中の一部である対象サーバのＭＡＣ（media access control）アドレスを記憶するＭＡＣアドレス記憶部と、
前記ＭＡＣアドレス記憶部に記憶された前記ＭＡＣアドレスを宛先としたデータリンク層のデータに基づくパケット転送により、前記第１の更新部による前記オブジェクト情報の更新内容及び更新時のゲーム内時間を示す時間情報を示す更新情報を前記対象サーバに送信する第１の送信部と、
他の前記サーバから受信した前記更新情報に基づき、前記オブジェクト情報記憶部に記憶されている前記オブジェクト情報のうち、担当する前記エリアの外に存在する前記オブジェクトの前記オブジェクト情報の更新を行い、前記時間情報に基づき時系列順の前記オブジェクト情報の更新を実現する第２の更新部と、
を有するサーバ。
【請求項２】
前記時間情報は、複数の前記サーバ各々により同一の処理で生成されている請求項１に記載のサーバ。
【請求項３】
他の前記サーバからのリクエストに応じて、ＩＰ（internet protocol）通信で、前記オブジェクト情報記憶部に記憶されている前記オブジェクト情報を他の前記サーバに送信する第２の送信部をさらに有する請求項１又は２に記載のサーバ。
【請求項４】
前記ＭＡＣアドレス記憶部は、自サーバが担当する前記エリアとの地理的関係が所定条件を満たす前記エリアを担当する前記サーバのＭＡＣアドレスを記憶する請求項１から３のいずれか１項に記載のサーバ。
【請求項５】
前記ＭＡＣアドレス記憶部は、前記サーバにインストールされたＯＳ（operating system）のカーネルが提供するネットワークトラフィック制御機能で設定されたパケット送信先のＭＡＣアドレスを記憶し、
前記第１の送信部による前記対象サーバへの前記更新情報の送信は、前記ＯＳの前記ネットワークトラフィック制御機能で実現される請求項１から４のいずれか１項に記載のサーバ。
【請求項６】
請求項１から５のいずれか１項に記載の前記サーバを複数有するゲームシステム。
【請求項７】
ゲーム空間内の複数のエリア各々を担当し、前記エリア間を移動可能な複数のオブジェクト各々の状態を示すオブジェクト情報を管理する複数のサーバを有するゲームシステムの１つの前記サーバが、
前記オブジェクト情報と、前記複数のサーバの中の一部である対象サーバのＭＡＣアドレスを記憶し、
記憶している前記オブジェクト情報のうち、担当する前記エリア内に存在する前記オブジェクトの前記オブジェクト情報の更新を行う第１の更新工程と、
前記ＭＡＣアドレスを宛先としたデータリンク層のデータに基づくパケット転送により、前記第１の更新工程での前記オブジェクト情報の更新内容及び更新時のゲーム内時間を示す時間情報を示す更新情報を前記対象サーバに送信する第１の送信工程と、
他の前記サーバから受信した前記更新情報に基づき、記憶している前記オブジェクト情報のうち、担当する前記エリアの外に存在する前記オブジェクトの前記オブジェクト情報の更新を行い、前記時間情報に基づき時系列順の前記オブジェクト情報の更新を実現する第２の更新工程と、
を実行する処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サーバ、ゲームシステム及び処理方法に関する。
【背景技術】
【０００２】
近年流行しているオープンワールド型のゲームを大規模なＭＭＯ（Massively Multiplayer Online）として提供することが出来れば、開発コストの高いオープンワールド型のゲームから、長期的に利益を得ることが出来るようになる。
【０００３】
オープンワールド型のＭＭＯゲームでは、例えばゲーム空間が複数のエリアに分かれており、１つのエリアが１つの負荷分散の単位に対応する。そして、オブジェクト（キャラクタ等）の移動、キャラクタ同士の戦闘、アイテム交換、魔法の発動などの相互作用が負荷分散の単位をまたがって行われることがあるため、分散したオンメモリデータベース間の同期処理が必要となる。
【０００４】
このようなオープンワールド型のＭＭＯゲームを対象としたオンメモリデータベースを実現する際の最大の課題は、オブジェクトが複数のエリアをまたいで自由に移動する状況において、複数のノードによる適切な負荷分散機能を実現する点にある。
【０００５】
オブジェクトがオープンワールドにおいて自由に移動・行動する状況において、オブジェクトの移動範囲の制限や、同時ログイン可能なプレイや数の制限を設定することなく、オブジェクトの自由行動を許可したまま、自動的にサーバへの負荷を平準化させる新たな同期方式が望まれている。
【０００６】
例えば、非特許文献１乃至３に開示のように、データ・レプリケーションや、データ同期、分散データベースの分野において、数多くの研究がなされてきた。また、非特許文献４乃至６に開示のように、ＭＭＯを対象としたデータベース負荷分散やデータ同期の研究も、データ・レプリケーション技術の発展として捉えられ、北米やカナダで活発に研究されてきた。しかしながら、これらは、ゲーム内のエリアやオブジェクトにラベル付けを行い、そのラベルへのPublish/Subscribeモデルとしてデータの分散と購読を行っており、オープンワールド型の、不特定多数のオブジェクトが１つの仮想空間を共有して、リアルタイムにデータを更新しあうような状況は想定していない。
【０００７】
また、非特許文献７に開示のように、ＩＰ（internet protocol）マルチキャストを活用したデータ・レプリケーション方式の研究がなされ、特許文献１に開示のようにそれに関連する特許出願もなされている。しかし、ＩＰマルチキャストを柔軟に行うことは難しい。特に、データ・レプリケーションが求める柔軟性と効率性を達成することが難しく、発展的な研究は行われていない。
【０００８】
非特許文献８や非特許文献９に開示のように、地理的関係を活用したデータ・レプリケーションの方式は提供されているものの、ゲーム固有の仮想空間の情報を活用したデータ・レプリケーション方法は知られていない。また、分散共有メモリ、特に、パブリッククラウドで柔軟に利用可能なソフトウェアベースの分散共有メモリの分野においては、非特許文献１０及び１１に開示のように、Kerrighed、openMosix、OpenSSIといった研究とＯＳＳプロジェクトが立ちあげられてきた。しかしながら、それらは２０００年代半ばにプロジェクトが休止し、広く活用されるには至っていない。
【０００９】
近年、非特許文献１２に開示のように、カーネルレベルでのリモートメモリアクセスを透過的に実現する仕組みも研究されている。しかし、それらは主に大規模な科学技術演算を行うことを想定しており、ゲームのように、コンテンツの状況に応じてメモリへのアクセスパターンが大きく変化するアプリケーションは、いまだ研究されてこなかった。現在は、非特許文献１３及び１４に開示のように、クラウド上での共有メモリが活発に研究されているが、ゲームへの応用は考慮されておらず、汎用的なユースケースにとどまっている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】ＵＳ９３３０１５４Ｂ２
【非特許文献】
【００１１】
【非特許文献１】B. Kemme, R. Jimenez-Peris, and M. Patino-Martinez, "Database Replication," Vol. 2, No. 1, pp. 1-153, 2010., DOI:https://doi.org/10.2200/S00296ED1V01Y201008DTM007
【非特許文献２】B. Kemme and G. Alonso, "Database replication: a tale of research across communities," Proc. VLDB Endow. 3, 1-2, pp. 5-12, September 2010., DOI: http://dx.doi.org/10.14778/1920841.1920847
【非特許文献３】B. Kemme and G. Alonso, "A new approach to developing and implementing eager database replication protocols.," ACM Trans. Database Syst. 25, pp. 333-379, 3  September 2000., DOI: https://doi.org/10.1145/363951.363955
【非特許文献４】J. Gascon-Samson, J. Kienzle, and B. Kemme, "MultiPub: Latency and Cost-Aware Global-Scale Cloud Publish/Subscribe," 2017 IEEE 37th International Conference on Distributed Computing Systems (ICDCS), Atlanta, GA, pp. 2075-2082, 2017., doi: 10.1109/ICDCS.2017.203
【非特許文献５】C. Canas, K. Zhang, B. Kemme, J. Kienzle, and H. A. Jacobsen, "Self-Evolving Subscriptions for Content-Based Publish/Subscribe Systems," 2017 IEEE 37th International Conference on Distributed Computing Systems (ICDCS), Atlanta, GA, pp. 1597-1607, 2017., doi: 10.1109/ICDCS.2017.277
【非特許文献６】C. Canas, K. Zhang, B. Kemme, J. Kienzle, and H. A. Jacobsen, "Publish/subscribe network designs for multiplayer games," In Proceedings of the 15th International Middleware Conference (Middleware '14), ACM, New York, NY, USA, pp. 241-252, 2014., DOI: https://doi.org/10.1145/2663165.2663337
【非特許文献７】J. Holliday, D. Agrawal, A. E. Abbadi, "The performance of database replication with group multicast," Digest of Papers. Twenty-Ninth Annual International Symposium on Fault-Tolerant Computing (Cat. No.99CB36352), Madison, WI, USA, pp. 158-165, 1999., doi: 10.1109/FTCS.1999.781046
【非特許文献８】T. Groothuyse, S. Sivasubramanian, and G. Pierre, "GlobeTP: template-based database replication for scalable web applications," In Proceedings of the 16th international conference on World Wide Web (WWW '07), ACM, New York, NY, USA, pp. 301-310, 2007., DOI: https://doi.org/10.1145/1242572.1242614
【非特許文献９】C. Maihofer, "A survey of geocast routing protocols," in IEEE Communications Surveys & Tutorials, vol. 6, no. 2, pp. 32-42, Second Quarter 2004., doi: 10.1109/COMST.2004.5342238
【非特許文献１０】R. Lottiaux, B. Boissinot, P. Gallard, G. Vallee, and C. Morin, "OpenMosix, OpenSSI and Kerrighed: A Comparative Study," [Research Report] RR-5399, INRIA, p.20, 2004.
【非特許文献１１】C. Amza et al., "TreadMarks: shared memory computing on networks of workstations," in Computer, vol. 29, no. 2, pp. 18-28, Feb. 1996., doi: 10.1109/2.485843.
【非特許文献１２】S. Ahn, E. Lim, W. Choi, S. Kang, H. Kim, "A Design of Kernel-Level Remote Memory Extension System," In IT Convergence and Security 2017, LNEE, vol 449, 2018., https://doi.org/10.1007/978-981-10-6451-7_13
【非特許文献１３】J. Ousterhout, P. Agrawal, D. Erickson, C. Kozyrakis, J. Leverich, D. Mazieres, S. Mitra, A. Narayanan, G. Parulkar, M. Rosenblum, S. M. Rumble, E. Stratmann, and R. Stutsman, "The case for RAMClouds: scalable high-performance storage entirely in DRA," SIGOPS Oper. Syst. Rev. 43, 4 (January 2010), pp. 92-105, 2010., DOI: https://doi.org/10.1145/1713254.1713276
【非特許文献１４】H. Han, Y. C. Lee, W. Shin, H. Jung, H. Y. Yeom and A. Y. Zomaya, "Cashing in on the Cache in the Cloud," in IEEE Transactions on Parallel and Distributed Systems, vol. 23, no. 8, pp. 1387-1399, Aug. 2012., doi: 10.1109/TPDS.2011.297
【非特許文献１５】"Amazon VPCのよくある質問"、https://aws.amazon.com/jp/vpc/faqs/
【発明の概要】
【発明が解決しようとする課題】
【００１２】
本発明は、ゲームシステムに適した新たなデータ同期方式を提供することを課題とする。
【課題を解決するための手段】
【００１３】
本発明によれば、
ゲーム空間内の複数のエリア各々を担当し、前記エリア間を移動可能な複数のオブジェクト各々の状態を示すオブジェクト情報を管理する複数のサーバを有するゲームシステムの１つの前記サーバであって、
前記オブジェクト情報を記憶するオブジェクト情報記憶部と、
前記オブジェクト情報記憶部に記憶されている前記オブジェクト情報のうち、担当する前記エリア内に存在する前記オブジェクトの前記オブジェクト情報の更新を行う第１の更新部と、
前記複数のサーバの中の一部である対象サーバのＭＡＣ（media access control）アドレスを記憶するＭＡＣアドレス記憶部と、
前記ＭＡＣアドレス記憶部に記憶された前記ＭＡＣアドレスを宛先としたデータリンク層のデータに基づくパケット転送により、前記第１の更新部による前記オブジェクト情報の更新内容及び更新時のゲーム内時間を示す時間情報を示す更新情報を前記対象サーバに送信する第１の送信部と、
他の前記サーバから受信した前記更新情報に基づき、前記オブジェクト情報記憶部に記憶されている前記オブジェクト情報のうち、担当する前記エリアの外に存在する前記オブジェクトの前記オブジェクト情報の更新を行い、前記時間情報に基づき時系列順の前記オブジェクト情報の更新を実現する第２の更新部と、
を有するサーバが提供される。
【００１４】
また、本発明によれば、前記サーバを複数有するゲームシステムが提供される。
【００１５】
また、本発明によれば、
ゲーム空間内の複数のエリア各々を担当し、前記エリア間を移動可能な複数のオブジェクト各々の状態を示すオブジェクト情報を管理する複数のサーバを有するゲームシステムの１つの前記サーバが、
前記オブジェクト情報と、前記複数のサーバの中の一部である対象サーバのＭＡＣアドレスを記憶し、
記憶している前記オブジェクト情報のうち、担当する前記エリア内に存在する前記オブジェクトの前記オブジェクト情報の更新を行う第１の更新工程と、
前記ＭＡＣアドレスを宛先としたデータリンク層のデータに基づくパケット転送により、前記第１の更新工程での前記オブジェクト情報の更新内容及び更新時のゲーム内時間を示す時間情報を示す更新情報を前記対象サーバに送信する第１の送信工程と、
他の前記サーバから受信した前記更新情報に基づき、記憶している前記オブジェクト情報のうち、担当する前記エリアの外に存在する前記オブジェクトの前記オブジェクト情報の更新を行い、前記時間情報に基づき時系列順の前記オブジェクト情報の更新を実現する第２の更新工程と、
を実行する処理方法が提供される。
【発明の効果】
【００１６】
本発明によれば、ゲームシステムに適した新たなデータ同期方式が提供される。
【図面の簡単な説明】
【００１７】
【図１】本実施形態のゲームシステムの全体像を説明するための図である。
【図２】本実施形態のサーバのハードウエア構成の一例を示す図である。
【図３】本実施形態のサーバの機能を説明するための図である。
【図４】本実施形態のサーバの機能ブロックの一例を示す図である。
【図５】本実施形態のサーバが処理する情報の一例を模式的に示す図である。
【図６】本実施形態のサーバが処理する情報の一例を模式的に示す図である。
【図７】本実施形態のサーバが処理する情報の一例を模式的に示す図である。
【図８】本実施形態のサーバの処理の流れの一例を説明するためのフローチャートである。
【図９】本実施形態のサーバの処理の流れの一例を説明するためのフローチャートである。
【図１０】本実施形態のサーバの処理の流れの一例を説明するためのフローチャートである。
【図１１】本実施例のサーバを説明するための図である。
【図１２】本実施例のサーバを説明するための図である。
【図１３】本実施例のサーバを説明するための図である。
【発明を実施するための形態】
【００１８】
＜技術思想＞
まず、本実施形態のゲームシステムの技術思想を説明する。本実施形態の目的は、例えば明示的なサーバ分割の単位を持たないオープンワールド型ＭＭＯゲームを対象として、各サーバが管理するゲームのステート情報を適切にサーバ間で同期することが可能な大規模な負荷分散を実現することである。そのために、本実施形態では、ゲームの仮想空間上で地理的に近いエリアを担当するサーバ間の接続を、アプリケーションを介さないＯＳ（operating system）カーネル間の直接的な通信として実装し、分散共有メモリ上で高効率にステート情報を管理する方式を採用する。
【００１９】
具体的には、本実施形態では、ゲーム空間は複数のエリアに分割され、エリアごとに担当サーバが決定される。そして、互いの間をオブジェクトが頻繁に移動する２つのエリア各々を担当するサーバ間の通信を高速化させるために、それぞれのサーバで動作するＯＳのカーネルを用いた疑似ＩＰマルチキャスト処理を導入する。この仕組みは、オブジェクトの移動頻度[0]が高いことが予めわかっているノード群があれば、それらのノード群が同一パケットを自動的に受け取るように、カーネルのパケット転送フィルタを予め設定できるという点に着目したものである。[0]これにより、互いの間を高頻度にオブジェクトが移動する２つのエリア各々を担当するサーバ間では、カーネル間通信を用いて、すなわち、ＯＳのカーネルが管理するメモリ領域から個別のアプリケーションが管理するメモリ領域へ、パケットのデータをコピーすることや、ＣＰＵの実行権限をカーネルからアプリケーションへ移譲するコンテクスト・スイッチングをすることなく、オブジェクトの更新情報を即時かつ高速にプッシュ型で送受信（同期）することができる。当該構成により、ゲームのマップ情報と完全に一致する疑似ＩＰマルチキャストネットワーク構造を静的に構築することができる。
【００２０】
ここで、「擬似ＩＰマルチキャストネットワーク構造」について説明する。疑似ＩＰマルチキャストネットワーク構造は、カーネル上でパケット転送設定（宛先ＭＡＣアドレスの登録）を行うことで構築される。当該擬似ＩＰマルチキャストネットワーク構造においては、互いのＭＡＣアドレスを宛先ＭＡＣアドレスとして登録したサーバ間が直接接続される。直接接続されたサーバ間においては、擬似的なマルチキャスト機能を用いて、分散共有メモリを構築する各ノードのカーネルをルータにしてデータを送受信可能となっている。
【００２１】
本実施形態は、分散共有メモリの各ノードのカーネルをルータにすることにより、中央制御されたルータやアプリケーション層の高度なルーティング処理を必要とせずに、高効率なカーネル間通信でwrite命令のルーティングとＴｉｃｋ−ＩＤによる一貫性制御を行う。このように、本実施形態は、ルータ等の専用ネットワーク機器やアプリケーション固有のパケット送受信処理を用いずに、標準的なカーネルの機能のみで所定のパケットを適切な受信先へと送り届ける機能を実現するという特徴を有する。
【００２２】
なお、上記カーネル間通信が行われないサーバ間（疑似ＩＰマルチキャストネットワーク構造で直接接続されていないサーバ間）で同期が必要になった時は、例えば、通常のアプリケーションレベルのＩＰ通信を採用し、必要な時にプル型で更新情報を送受信（同期）することができる。
【００２３】
また、本実施形態は、カーネルのパケット転送フィルタを用いた疑似ＩＰマルチキャストを用いるため、ネットワークの設定を変更することなく、柔軟にサーバからの同期先を変更することができる。１つのサーバが複数のサーバからの同期を受け入れることも可能である。
【００２４】
一般的に、プッシュ型同期では、プッシュされたデータ間の整合性、一貫性を管理することが極めて重要となるが、本実施形態では、ゲーム固有の時間情報（Ｔｉｃｋ−ＩＤ等）を用いてメモリの更新／読み出し操作を直列化する。このため、従来の分散データベースの問題であった、データ整合性の問題を生じさせずに分散処理を行うことができる。したがって、ゲーム用途においては、ほとんどの場合はロックフリーで動作するインメモリデータベースとしてふるまうことが可能である。
【００２５】
＜処理の概要＞
次に、本実施形態のゲームシステムの処理の概要を説明する。本実施形態のゲームシステムは複数のサーバを有する。そして、複数のサーバ各々がゲーム空間内の複数のエリア各々を担当する。各サーバは、プレイヤ入力又は自装置内で生成された制御情報に基づき、自サーバが担当するエリア内に存在するオブジェクトのオブジェクト情報（上記ステート情報に対応）の更新を行う。
【００２６】
そして、複数のサーバは、各サーバが管理するオブジェクト情報を同期する処理を行う。互いの間をオブジェクトが頻繁に移動する２つのエリア各々を担当するサーバ間では、ＯＳのカーネルを用いた疑似ＩＰマルチキャスト処理でプッシュ型の同期を行う。
【００２７】
プッシュ型の同期では、各サーバのＯＳは、他のサーバからのリクエストなしで、予め登録されている対象サーバのＭＡＣアドレスを宛先としたデータリンク層（Ｌ２）のデータに基づくパケット転送により、更新情報を当該対象サーバに送信する。このような処理により、即時かつ高速な同期が実現される。対象サーバは、複数のサーバの中の一部である。どのサーバを対象サーバとするかはサーバごとに決定される。各サーバが担当するエリアとの間でのオブジェクトの行き来が高頻度で行われるエリアを担当するサーバが、各サーバの対象サーバとして設定される。
【００２８】
プッシュ型の同期は、例えば、サーバが受信した全データを常に所定のサーバ群へとコピーすることとする。これを、レプリケーションと呼ぶ。変形例として、プッシュ型の同期では、逐次的にパケットをコピーするのではなく、一定期間バッファリングしてからコピーしてもよい。
【００２９】
なお、プッシュ型の同期が行われないサーバ間で同期が必要になった時は、例えば、通常のアプリケーション層の通信、例えばＩＰ通信を採用し、必要な時にプル型で更新情報を送受信することができる（プル型の同期）。例えば、第１のサーバの対象サーバとして設定されておらず、第１のサーバとの間でプッシュ型の同期が行われないサーバが、必要に応じて第１のサーバに更新情報を要求する。プッシュ型の同期は、パケットを受け取ったサーバが能動的にパケットを他のサーバに転送することを意味する。プル型の同期は、情報が必要になったサーバがその情報を他のサーバに要求して取得することで、必然的に同期が行われるというものである。
【００３０】
プル型の同期では、各サーバ上で稼働するアプリケーションは、他のサーバからのリクエストに応じて、例えばＩＰ通信で、更新情報を他のサーバに送信する。リクエストを発生させることができるのは、データが必要とされているという状況を認識できるアプリケーションのみである。このため、このプル型の同期は、必然的に、アプリケーション層の処理が必要になる。なお、アプリケーション層の処理を要する通信では、異なる階層間でのデータの受け渡し等が発生するうえ、コンテキストスイッチが必要になるため、一般的に、１バイトあたりの送受信に必要な時間が大きくなる。このため、当該プル型の同期は、プッシュ型の同期に比べて低速な同期となる。プル型の同期では、更新内容のみを送受信してもよし、リクエストで指定された内容のみを送受信してもよい。
【００３１】
以上、本実施形態では、互いが担当するエリア間でオブジェクトの行き来が高頻度で行われるサーバ間は、疑似ＩＰマルチキャストネットワーク構造で直接接続し（カーネル上のパケット転送設定において、互いのＭＡＣアドレスを宛先として登録）、プッシュ型の同期で即時かつ高速な同期を行う。プッシュ型の同期の設定を、仮想空間上の地理的関係に基づいて行うことにより、プッシュ型の同期によるデータの共有率を高く保ちながら、プッシュ同期にかかるＣＰＵ負荷、ネットワーク負荷を低く抑えることができる。
【００３２】
また、本実施形態では、サーバ間で送受信する更新情報の中にＴｉｃｋ−ＩＤ等の時間情報を含める。そして、この時間情報を用いて、メモリの更新／読み出し操作を直列化する。これによりデータ間の整合性や一貫性を管理することが可能となる。
【００３３】
＜ゲームシステムの全体構成＞
次に、本実施形態のゲームシステムの全体構成を説明する。図１に示すように、ゲームシステムは、複数のサーバ１０を有する。
【００３４】
複数のサーバ１０は、同一のネットワークもしくはクラウド上の同一の仮想ネットワーク内に位置し、データリンク層のアドレス（ＭＡＣアドレス）に基づくパケット転送により、互いにデータの送受信ができるようになっている。例えば、複数のサーバ１０は、同一の仮想ネットワーク内（例えば、仮想ネットワークサーバを論理的に分割することで生成されたサブネット）に存在することができる。例えば、非特許文献１５に開示の技術を利用して、このような複数のサーバ１０の構成を実現することができる。
【００３５】
複数のサーバ１０は、インターネット３０を介して、複数のプレイヤ端末２０と接続される。プレイヤ端末２０は、プレイヤが操作する端末であり、例えばスマートフォン、タブレット端末、ＰＣ（personal computer）、携帯電話、ゲーム端末等が例示されるが、これらに限定されない。
【００３６】
＜サーバ１０の構成＞
次に、サーバ１０の構成を説明する。まず、サーバ１０のハードウエア構成を説明する。本実施形態のサーバ１０が備える各機能部は、任意のコンピュータのＣＰＵ（Central Processing Unit）、メモリ、メモリにロードされるプログラム、そのプログラムを格納するハードディスク等の記憶ユニット（あらかじめ装置を出荷する段階から格納されているプログラムのほか、ＣＤ（Compact Disc）等の記憶媒体やインターネット上のサーバ等からダウンロードされたプログラムをも格納できる）、ネットワーク接続用インターフェイスを中心にハードウエアとソフトウエアの任意の組合せによって実現される。そして、その実現方法、装置にはいろいろな変形例があることは、当業者には理解されるところである。
【００３７】
図２は、本実施形態のサーバ１０のハードウエア構成を例示するブロック図である。図２に示すように、サーバ１０は、プロセッサ１Ａ、メモリ２Ａ、入出力インターフェイス３Ａ、周辺回路４Ａ、バス５Ａを有する。周辺回路４Ａには、様々なモジュールが含まれる。サーバ１０は周辺回路４Ａを有さなくてもよい。
【００３８】
なお、サーバ１０は物理的及び／又は論理的に分かれた複数の装置で構成されてもよい。すなわち、１つのサーバ１０は、複数の装置のクラスタとして構成されてもよい。この場合、各装置が上記ハードウエア構成を備えることができる。その他、サーバ１０は、物理的及び論理的に１つの装置で構成されてもよい。
【００３９】
バス５Ａは、プロセッサ１Ａ、メモリ２Ａ、周辺回路４Ａ及び入出力インターフェイス３Ａが相互にデータを送受信するためのデータ伝送路である。プロセッサ１Ａは、例えばＣＰＵ、ＧＰＵ（Graphics Processing Unit）などの演算処理装置である。メモリ２Ａは、例えばＲＡＭ（Random Access Memory）やＲＯＭ（Read Only Memory）などのメモリである。入出力インターフェイス３Ａは、入力装置、外部装置、外部サーバ、外部センサ等から情報を取得するためのインターフェイスや、出力装置、外部装置、外部サーバ等に情報を出力するためのインターフェイスなどを含む。入力装置は、例えばキーボード、マウス、マイク等である。出力装置は、例えばディスプレイ、スピーカ、プリンター、メーラ等である。プロセッサ１Ａは、各モジュールに指令を出し、それらの演算結果をもとに演算を行うことができる。
【００４０】
次に、サーバ１０の機能構成を説明する。本実施形態のゲームシステムが提供するゲームは、例えばオープンワールド型ＭＭＯゲームである。図３に示すように、ゲーム空間は複数のエリアに分かれている。ゲーム空間内に存在するオブジェクトは、エリア間を移動可能である（すなわち、エリアを跨いだ移動が可能）。オブジェクトは、プレイヤにより制御されるプレイヤオブジェクトや、プレイヤにより制御されないノンプレイヤオブジェクトを含む。オブジェクトは、キャラクタ、弓、銃弾、鳥等のあらゆるオブジェクトを含む。各サーバ１０は、複数のエリア各々を担当する。
【００４１】
ここで、「エリアを担当する」の概念を説明する。複数のエリアの中の第１のエリアを担当するサーバ１０は、第１のエリアに存在するオブジェクトの状態を示すオブジェクト情報を記憶し、プレイヤ入力で生成された制御情報、又は、自装置で決定した制御情報に基づき、そのオブジェクト情報を更新する。そして、第１のエリアを担当するサーバ１０は、第１のエリアに存在するオブジェクトのオブジェクト情報の更新内容を示す更新情報を、他のサーバ１０に送信する。このように、第１のエリアを担当するサーバ１０は、上述のような処理で担当するエリアに存在するオブジェクトのオブジェクト情報を更新するとともに、その更新内容を他のサーバ１０に送信する。
【００４２】
なお、以下の説明で明らかになるが、第１のエリアを担当するサーバ１０は、第１のエリアに存在するオブジェクトのオブジェクト情報のみならず、担当するエリアの外に存在するオブジェクトのオブジェクト情報も記憶し、更新する。例えば、第１のエリアを担当するサーバ１０は、第１のエリアとの間でのオブジェクトの行き来が高頻度で行われるエリアを担当するサーバ１０からプッシュ型の同期で受信したそのエリアに存在するオブジェクトのオブジェクト情報を記憶し、更新する。また、例えば、第１のエリアを担当するサーバ１０は、その他のエリアを担当するサーバ１０からプル型の同期で受信したそのエリアに存在するオブジェクトのオブジェクト情報を記憶し、更新する。
【００４３】
しかし、担当するエリアに存在するオブジェクトのオブジェクト情報の更新方法と、担当するエリアの外に存在するオブジェクトのオブジェクト情報の更新方法は異なる。具体的には、担当するエリアに存在するオブジェクトのオブジェクト情報の更新方法は上述の通りである。これに対し、担当するエリアの外に存在するオブジェクトのオブジェクト情報は、他のサーバ１０からプッシュ型又はプル型の同期で受信した更新情報に基づき更新される。また、サーバ１０は、担当するエリアの外に存在するオブジェクトのオブジェクト情報を更新しても、その更新内容を示す更新情報を他のサーバ１０に送信しない。この点でも、担当するエリアに存在するオブジェクトと他のエリアに存在するオブジェクトとの扱いが異なる。
【００４４】
図４に、サーバ１０の機能ブロック図の一例を示す。図示するように、サーバ１０は、オブジェクト情報記憶部１１と、第１の更新部１２と、第１の送信部１３と、ＭＡＣアドレス記憶部１４と、第２の更新部１５と、第２の送信部１６とを有する。
【００４５】
オブジェクト情報記憶部１１は、ゲーム空間内に存在するオブジェクトの状態を示すオブジェクト情報を記憶する。オブジェクト情報は、ゲーム空間におけるオブジェクトの位置を示す位置情報、オブジェクトの向きを示す向き情報、ヒットポイント、攻撃力、防御力、レベル等のあらゆる情報を含む。
【００４６】
各サーバ１０のオブジェクト情報記憶部１１は、ゲーム空間内に存在する複数のオブジェクトの中の一部のオブジェクトのオブジェクト情報を記憶する。オブジェクト情報記憶部１１は、自サーバ１０が担当するエリア内に存在するオブジェクトのオブジェクト情報を記憶する。
【００４７】
ここで、「自サーバ１０」について説明する。まず、複数のサーバ１０の中の１つである第１のサーバ１０内に実現された機能部（オブジェクト情報記憶部１１、第１の更新部１２、第１の送信部１３、ＭＡＣアドレス記憶部１４、第２の更新部１５及び第２の送信部１６）を第１の機能部と定義する。この場合、第１の機能部にとって第１のサーバ１０は「自サーバ１０」となる。そして、第１の機能部にとって、第１のサーバ１０以外のサーバ１０は「他のサーバ１０」となる。
【００４８】
オブジェクト情報記憶部１１の構成の説明に戻る。オブジェクト情報記憶部１１は、自サーバ１０が担当するエリアの外に存在するオブジェクトのオブジェクト情報を記憶することもできる。具体的には、オブジェクト情報記憶部１１は、同期処理で他のサーバ１０から受信したオブジェクト情報を記憶する。すなわち、オブジェクト情報記憶部１１は、プッシュ型の同期処理により、疑似ＩＰマルチキャストネットワーク構造で自サーバ１０と直接接続されている他のサーバ１０から受信したオブジェクト情報を記憶する。また、オブジェクト情報記憶部１１は、例えばプル型の同期処理により、疑似ＩＰマルチキャストネットワーク構造で自サーバ１０と直接接続されていない他のサーバ１０から受信したオブジェクト情報を記憶する。
【００４９】
図５に、オブジェクト情報の一例を模式的に示す。図示するように、オブジェクト情報は、各パラメータの更新タイミングを示す情報をさらに含むことができる。更新タイミングは、例えばゲーム内時間を示す時間情報で示される。ゲーム内時間を示す時間情報の一例として、Ｔｉｃｋ−ＩＤが例示される。以下、ゲーム内時間を示す時間情報はＴｉｃｋ−ＩＤである前提とする。なお、パラメータ毎に更新タイミングを管理する手法に代えて、オブジェクト毎に更新タイミングを管理する手法を採用してもよい。
【００５０】
ここで、Ｔｉｃｋ−ＩＤについて説明する。Ｔｉｃｋ−ＩＤは、複数のサーバ１０各々により同一の処理で生成される。各サーバ１０は、所定時間毎にＴｉｃｋ−ＩＤを更新する。例えば、Ｔｉｃｋ−ＩＤは数字で示され、各サーバ１０は、所定時間毎にＴｉｃｋ−ＩＤを所定数ずつ（例えば「１」）増加させる。Ｔｉｃｋ−ＩＤの更新周期は、例えば０．０３〜０．０５秒（２０Ｈｚ〜３０Ｈｚ程度）である。ＮＴＰ（network time protocol）を用いる方法や、全てのサーバ１０に原子時計を配備する方法等の任意の手段で、複数のサーバ１０は同じタイミングで同じ値のＴｉｃｋ−ＩＤを生成するように同期されている。
【００５１】
図４に戻り、第１の更新部１２は、オブジェクト情報記憶部１１に記憶されているオブジェクト情報のうち、自サーバ１０が担当するエリア内に存在するオブジェクトのオブジェクト情報の更新を行う。
【００５２】
例えば、第１の更新部１２は、自サーバ１０が担当するエリアに存在するプレイヤオブジェクトの制御情報をプレイヤ端末２０から受信し、その制御情報に基づきそのプレイヤオブジェクトのオブジェクト情報を更新する。プレイヤオブジェクトの制御情報は、例えばプレイヤ端末２０を介したプレイヤ入力に基づき生成される。制御情報は、プレイヤ入力の内容を示す情報（タッチ位置を時系列に示すデータ、当該データに基づき算出された大きさや方向を示すデータ等）であってもよいし、プレイヤ入力の内容に基づきプレイヤ端末２０が決定した制御内容（プレイヤオブジェクトの移動量、移動方向、移動後の位置等）を示す情報であってもよい。
【００５３】
また、例えば、第１の更新部１２は、自サーバ１０が担当するエリアに存在するノンプレイヤオブジェクトの制御内容を決定し、そのノンプレイヤオブジェクトのオブジェクト情報を更新する。ノンプレイヤオブジェクトの制御内容を決定するアルゴリズムは設計的事項である。
【００５４】
上述のような処理でオブジェクト情報を更新する第１の更新部１２は、自サーバ１０が担当するエリアに存在するオブジェクトのオブジェクト情報の更新のみを行い、自サーバ１０が担当するエリアの外に存在するオブジェクトのオブジェクト情報の更新は行わない。
【００５５】
第１の更新部１２は、Ｔｉｃｋ−ＩＤに基づき、時系列順のオブジェクト情報の更新を実現する。例えば、第１の更新部１２は、所定のオブジェクトのオブジェクト情報の所定のパラメータを更新する際、まず、オブジェクト情報記憶部１１が記憶するオブジェクト情報を参照して（図５参照）、そのパラメータの最新の更新タイミングのＴｉｃｋ−ＩＤを特定する。そして、最新の更新タイミングのＴｉｃｋ−ＩＤが、今回の更新タイミングのＴｉｃｋ−ＩＤ（現時点のＴｉｃｋ−ＩＤ）よりも時間的に前である場合、問題ないので第１の更新部１２は更新処理を実行する。一方、最新の更新タイミングのＴｉｃｋ−ＩＤが、今回の更新タイミングのＴｉｃｋ−ＩＤ（現時点のＴｉｃｋ−ＩＤ）よりも時間的に後である場合、問題ありなので第１の更新部１２は更新処理を実行しない。この場合、第１の更新部１２は任意のエラー処理を実行する。
【００５６】
ＭＡＣアドレス記憶部１４は、複数のサーバ１０の中の一部である対象サーバのＭＡＣアドレスを記憶する。図６に、ＭＡＣアドレス記憶部１４が記憶する対象サーバ情報の一例を模式的に示す。対象サーバ情報の内容は、サーバ１０毎に異なる。すなわち、サーバ１０毎に、どのサーバ１０を対象サーバとするかは異なる。
【００５７】
例えば、ＭＡＣアドレス記憶部１４は、自サーバ１０が担当するエリアとの地理的関係が所定条件を満たすエリアを担当するサーバ１０のＭＡＣアドレスを記憶する。すなわち、自サーバ１０が担当するエリアとの地理的関係が所定条件を満たすエリアを担当するサーバ１０が、自サーバ１０の対象サーバとなる。所定条件は、「一方のエリア内から他方のエリア内へのオブジェクトの移動に要する最短の時間が基準値以下」、「互いに隣接する」、「互いに隣接し、かつ、互いの境界部分にエリア間移動を妨げる障害物がない」、「互いの最短距離が、任意のオブジェクト（弓矢や砲弾等のキャラクタ外のオブジェクト等）の移動距離以内」、「ゲーム上、他のエリアを介さずに互いのエリア間を移動可能になっている（徒歩等での隣接エリア間移動、ワープ等での互いに離れたエリア間移動等）」等が例示されるが、これに限定されない。
【００５８】
図６に示すような対象サーバ情報は、ゲームシステムを管理するオペレータにより生成される。例えば、オペレータは、サーバ１０毎に対象サーバのＭＡＣアドレスを入力することで、図６に示すような対象サーバ情報を生成してもよい。
【００５９】
その他、各サーバ１０は、図７に示すような他のサーバ１０に関するサーバ情報を記憶しておいてもよい。サーバ情報は、他のサーバ１０各々のサーバ識別情報と、他のサーバ１０各々のＭＡＣアドレスと、他のサーバ１０各々が担当するエリアの識別情報とが紐づけられている。この場合、オペレータは、サーバ１０毎に対象サーバとするサーバ１０のサーバ識別情報を入力してもよい。そして、サーバ１０は、入力されたサーバ識別情報に紐づくＭＡＣアドレスをサーバ情報から取得し、対象サーバ情報に登録してもよい。その他、オペレータは、サーバ１０毎に対象サーバとするサーバ１０が担当しているエリアのエリア識別情報を入力してもよい。そして、サーバ１０は、入力されたエリア識別情報に紐づくＭＡＣアドレスをサーバ情報から取得し、対象サーバ情報に登録してもよい。
【００６０】
なお、ＭＡＣアドレス記憶部１４への対象サーバのＭＡＣアドレスの登録は、例えばサーバ１０にインストールされたＯＳのカーネルが提供するネットワークトラフィック制御機能におけるパケット送信先のＭＡＣアドレスの登録（フィルタリングの設定）で実現される。
【００６１】
第１の送信部１３は、対象サーバからのリクエストなしで、ＭＡＣアドレス記憶部１４に記憶されたＭＡＣアドレスを宛先としたデータリンク層のデータ（ＭＡＣアドレス等）に基づくパケット転送により、第１の更新部１２によるオブジェクト情報の更新内容を示す更新情報を対象サーバに送信する。第１の送信部１３は、第１の更新部１２によるオブジェクト情報の更新に応じて、その更新内容を示す更新情報を対象サーバに送信することができる。更新が行われたタイミングから更新情報の送信までのタイムラグ（経過時間）はできるだけ小さいのが好ましい。
【００６２】
更新情報には、更新が行われたタイミングを示す情報（更新時のＴｉｃｋ−ＩＤ）が含まれる。
【００６３】
なお、上述したデータリンク層のデータ（ＭＡＣアドレス等）を利用した一部のサーバ１０（対象サーバ）への更新情報の送信は、例えばＯＳのネットワークトラフィック制御機能におけるパケットフィルタリング機能で実現される。
【００６４】
第２の更新部１５は、プッシュ型同期又はプル型同期で他のサーバ１０から受信した更新情報に基づき、オブジェクト情報記憶部１１に記憶されているオブジェクト情報のうち、自サーバ１０が担当するエリアの外（自サーバ１０が担当しないエリア）に存在するオブジェクトのオブジェクト情報の更新を行う。
【００６５】
なお、上述のような処理でオブジェクト情報を更新する第２の更新部１５は、自サーバ１０が担当するエリアの外に存在するオブジェクトのオブジェクト情報の更新のみを行い、自サーバ１０が担当するエリアに存在するオブジェクトのオブジェクト情報の更新は行わない。
【００６６】
第２の更新部１５は、Ｔｉｃｋ−ＩＤに基づき、時系列順のオブジェクト情報の更新を実現する。例えば、第２の更新部１５は、所定のオブジェクトのオブジェクト情報の所定のパラメータを更新する際、まず、オブジェクト情報記憶部１１が記憶するオブジェクト情報を参照して（図５参照）、そのパラメータの最新の更新タイミングのＴｉｃｋ−ＩＤを特定する。そして、最新の更新タイミングのＴｉｃｋ−ＩＤが、更新情報に含まれるＴｉｃｋ−ＩＤ（他のサーバ１０で更新が行われ時のＴｉｃｋ−ＩＤ）よりも時間的に前である場合、問題ないので第２の更新部１５は更新処理を実行する。一方、最新の更新タイミングのＴｉｃｋ−ＩＤが、更新情報に含まれるＴｉｃｋ−ＩＤ（他のサーバ１０で更新が行われ時のＴｉｃｋ−ＩＤ）よりも時間的に後である場合、問題ありなので第２の更新部１５は更新処理を実行しない。この場合、第２の更新部１５は任意のエラー処理を実行する。
【００６７】
例えば、第２の更新部１５は、プッシュ型同期で更新情報が送受信された場合、更新・読み出しの操作に紐付くＴｉｃｋ−ＩＤに基づいて更新・読み出し操作を直列化する（更新・読み出しの順序を決定する）。そして、順序を決定した後、データ競合の問題が生じるときは、第２の更新部１５は例外をゲームロジックへ通知する。ゲームロジック側は、例えば、プレイヤごとに優先順位を設ける方式や、あるいは、エフェクトで競合状態をごまかすなどの方法（ゲームロジックの処理は設計事項）で、データ競合を解消する。データ競合の問題は、例えば、同一のＴｉｃｋ−ＩＤで、かつ、同一のメモリブロックアドレスへ、ｒｅａｄ操作とｗｒｉｔｅ操作が行われる場合や、同一のＴｉｃｋ−ＩＤで、かつ、同一のメモリブロックアドレスへ、２つ以上のｗｒｉｔｅ操作が行われる場合である。
【００６８】
図４に戻り、第２の送信部１６は、他のサーバ１０からのリクエストに応じて、ＩＰ通信で、オブジェクト情報記憶部１１に記憶されているオブジェクト情報を他のサーバ１０に送信する。第２の送信部１６は、各パラメータの更新タイミングを含むオブジェクト情報を他のサーバ１０に送信することができる。当該ＩＰ通信におけるネットワーク層のプロトコルはＩＰプロトコルであり、トランスポート層のプロトコルは、ＴＣＰ（Transmission Control Protocol）プロトコルやＵＤＰ（User Datagram Protocol）プロトコル等である。
【００６９】
他のサーバ１０からのリクエストは、オブジェクトを指定する情報が含まれてもよい。そして、第２の送信部１６は、オブジェクト情報記憶部１１に記憶されているオブジェクト情報のうち、指定されたオブジェクトのオブジェクト情報を他のサーバ１０に送信してもよい。
【００７０】
次に、サーバ１０の処理の流れの一例を説明する。
【００７１】
まず、図８のフローチャートを用いて、「自サーバ１０が担当するエリアに存在するオブジェクトのオブジェクト情報を更新し、更新情報を対象サーバに送信する処理」の流れの一例を説明する。
【００７２】
第１の更新部１２は、自サーバ１０が担当するエリアに存在するオブジェクトに関する制御情報の取得待ちとなっている（Ｓ１０）。例えば、第１の更新部１２は、自サーバ１０が担当するエリアに存在するプレイヤオブジェクトの制御情報をプレイヤ端末２０から受信することができる。また、第１の更新部１２は、自サーバ１０内で生成された自サーバ１０が担当するエリアに存在するノンプレイヤオブジェクトの制御情報を取得することができる。
【００７３】
制御情報を取得すると（Ｓ１０のＹｅｓ）、第１の更新部１２は、制御情報に基づきオブジェクトの更新内容を決定する（Ｓ１１）。例えば、制御情報がオブジェクトの移動方向や移動距離を示す場合、第１の更新部１２は、現在のそのオブジェクトの位置と当該制御情報とに基づき、そのオブジェクトの新たな位置を決定する。なお、制御情報に基づく更新内容の決定処理の詳細は設計的事項であり、この例示に限定されない。
【００７４】
その後、第１の更新部１２は、オブジェクト情報記憶部１１が記憶するオブジェクト情報を参照し（図５参照）、更新対象のオブジェクトの更新対象のパラメータの最新の更新タイミングを示すＴｉｃｋ−ＩＤを取得する（Ｓ１２）。そして、最新の更新タイミングを示すＴｉｃｋ−ＩＤと、今回の更新タイミングのＴｉｃｋ−ＩＤ（現時点のＴｉｃｋ−ＩＤ）と、を比較する（Ｓ１３）。
【００７５】
最新の更新タイミングのＴｉｃｋ−ＩＤが、今回の更新タイミングのＴｉｃｋ−ＩＤよりも時間的に前であり、矛盾しない場合（Ｓ１３のＮｏ）、第１の更新部１２は、Ｓ１１で決定した更新内容に基づき、オブジェクト情報記憶部１１が記憶するオブジェクト情報を更新する（Ｓ１４）。この時、第１の更新部１２は、更新したオブジェクトの更新したパラメータに紐づく更新タイミングを示す情報を、今回の更新タイミングを示すＴｉｃｋ−ＩＤに更新する。
【００７６】
次いで、第１の送信部１３は、Ｓ１４の更新に応じて、対象サーバからのリクエストなしで、ＭＡＣアドレス記憶部１４に記憶されたすべてのＭＡＣアドレスを宛先としたデータリンク層のデータに基づくパケット転送により、Ｓ１４でのオブジェクト情報の更新内容を示す更新情報を対象サーバに送信する（Ｓ１５）。
【００７７】
一方、最新の更新タイミングのＴｉｃｋ−ＩＤが、今回の更新タイミングのＴｉｃｋ−ＩＤよりも時間的に後であり、矛盾する場合（Ｓ１３のＹｅｓ）、第１の更新部１２は、Ｓ１１で決定した更新内容に基づくオブジェクト情報の更新を行わず、任意のエラー処理を行う（Ｓ１６）。
【００７８】
以降、サーバ１０は同様の処理を繰り返す。
【００７９】
次に、図９のフローチャートを用いて、「他のサーバ１０からのリクエストに応じて他のサーバ１０にオブジェクト情報を送信する処理」の流れの一例を説明する。
【００８０】
第２の送信部１６は、他のサーバ１０からのリクエスト待ちとなっている（Ｓ２０）。そして、第２の送信部１６は、他のサーバ１０からオブジェクト情報のリクエストを受信すると（Ｓ２０のＹｅｓ）、ＩＰ通信で、オブジェクト情報記憶部１１に記憶されているオブジェクト情報を他のサーバ１０に送信する（Ｓ２１）。
【００８１】
他のサーバ１０からのリクエストは、オブジェクトを指定する情報が含まれてもよい。そして、第２の送信部１６は、オブジェクト情報記憶部１１に記憶されているオブジェクト情報のうち、指定されたオブジェクトのオブジェクト情報を他のサーバ１０に送信してもよい。
【００８２】
以降、サーバ１０は同様の処理を繰り返す。
【００８３】
次に、図１０のフローチャートを用いて、「他のサーバ１０からの更新情報の取得に応じて、自サーバ１０が担当するエリアの外に存在するオブジェクトのオブジェクト情報を更新する処理」の流れの一例を説明する。
【００８４】
第２の更新部１５は、他のサーバ１０からの更新情報受信待ちとなっている（Ｓ３０）。そして、第２の更新部１５は、他のサーバ１０から更新情報を受信すると（Ｓ３０のＹｅｓ）、オブジェクト情報記憶部１１が記憶するオブジェクト情報を参照し（図５参照）、更新対象のオブジェクトの更新対象のパラメータの最新の更新タイミングを示すＴｉｃｋ−ＩＤを取得する（Ｓ３１）。そして、最新の更新タイミングを示すＴｉｃｋ−ＩＤと、更新情報に含まれる更新タイミングのＴｉｃｋ−ＩＤ（他のサーバ１０で更新が行われ時のＴｉｃｋ−ＩＤ）と、を比較する（Ｓ３２）。
【００８５】
最新の更新タイミングのＴｉｃｋ−ＩＤが、更新情報に含まれる更新タイミングのＴｉｃｋ−ＩＤよりも時間的に前であり、矛盾しない場合（Ｓ３２のＮｏ）、第２の更新部１５は、受信した更新情報で示される更新内容に基づき、オブジェクト情報記憶部１１が記憶するオブジェクト情報を更新する（Ｓ３３）。この時、第２の更新部１５は、更新したオブジェクトの更新したパラメータに紐づく更新タイミングを示す情報を、更新情報に含まれる更新タイミングを示すＴｉｃｋ−ＩＤに更新する。
【００８６】
一方、最新の更新タイミングのＴｉｃｋ−ＩＤが、更新情報に含まれる更新タイミングのＴｉｃｋ−ＩＤよりも時間的に後であり、矛盾する場合（Ｓ３２のＹｅｓ）、第２の更新部１５は、受信した更新情報で示される更新内容に基づくオブジェクト情報の更新を行わず、任意のエラー処理を行う（Ｓ３４）。
【００８７】
以降、サーバ１０は同様の処理を繰り返す。
【００８８】
＜実施例＞
次に、本実施形態のサーバ１０をより具体化した実施例を説明する。なお、当該実施例は上述した実施形態を具体化する一例であり、本実施形態の具体化手段はこれに限定されない。
【００８９】
従来の分散共有メモリにおいてリモートノードへのメモリアクセス頻度を低減するためには、ノード間で更新されたメモリ内容を頻繁に同期する必要がある。このため、Ｎ台のノードがあるとき、Ｎ２の通信量が発生してしまっていた。本実施例は、ＭＭＯというアプリケーション固有の制約として、仮想空間上のメッシュ構造をデータ同期の範囲として採用することにより、Ｎ２よりもはるかに小さい同期範囲で、実質的に必要なデータ同期を実現する。
【００９０】
本実施例によるサーバ１０間の同期の全体像を図１１に示す。本実施例では、ゲーム空間を複数のエリアに分割し、各サーバ１０が各エリアを担当する。そして、本実施例では、例えば互いに近傍する複数のエリアを担当する複数のサーバ１０間で、上述したプッシュ型の同期が実行される。なお、互いに近傍しない複数のエリアを担当する複数のサーバ１０間では、上述したプッシュ型の同期が実行されない。これにより、全サーバ１０の内容を同期せずとも、実質的に均一な分散データベースを形成できる。
【００９１】
また、本実施例では、上記実施形態では説明しなかったが、各エリアはシャード化かつレプリカ化され、負荷分散されてもよい。シャードの分散単位は、プレイヤ単位としてもよいし、オブジェクト単位としてもよいし、その他であってもよい。一例としてシャードの分散単位をプレイヤ単位とした場合、複数のサーバ１０各々で管理される同一プレイヤの情報は同じシャードに格納される。例えばすべてのシャードはプレイヤＩＤに適用するハッシュ関数を共有するため、近傍の同一階層シャードは同一プレイヤの情報を格納することになる。このため、同一階層のシャード間で同期処理を行えばよく、サーバ１０の処理負担が軽減される。
【００９２】
また、本実施例では、全てのデータ更新／参照操作について、Ｔｉｃｋ−ＩＤで実行順序と整合性を制御することにより、トランザクション隔離レベル問題を解消することができる。すなわち、全ての操作が直列化可能で、全てのエリアをフラットに参照可能なデータベースとして扱うことができる。
【００９３】
本実施例は、ＡＷＳ（非特許文献１５参照）の各ノード（ＥＣ２インスタンス）で、カーネル上でパケット転送設定をすると、実質的にマルチキャストできるという機能に着目し、分散共有メモリの各ノードのカーネルをルータにするという、「ルータ機能埋め込み型のＤＳＭ（Distributed Shared Memory）」を実現するものである。これにより、ゲームのマップ情報と完全に一致する疑似ＩＰマルチキャストネットワーク構造をクラウド上で静的に構築すると、ゲームのＴｉｃｋ−ＩＤさえパケット内に含まれていれば、ＩＰマルチキャストだけの超高効率なデータレプリケーション・データ同期が可能になる。
【００９４】
本実施例のシステム構成図を、図１２に示す。本システムは、完全にリニアなアドレス空間を、全サーバ１０をまたがる形でシームレスに提供するわけではなく、図中の"Ｋｅｙ−Ａ"に示されるように、文字列で識別可能な変数を各サーバ１０間で自動的に同期する仕組みである。すなわち、"ｋｅｙ−ｎａｍｅ"を変数ととらえれば、複数のサーバ１０間で共有される変数（メモリブロック）を提供する仕組みといえる。その点で、既存の分散共有メモリと大きく異なる。
【００９５】
本実施例は、１つのノード（サーバ１０）に閉じて実装することができる３つのモジュールから構成される。
【００９６】
１つ目のモジュールである［Ｍ１］Ｔｉｃｋ Ｍａｎａｇｅｒは、ゲームの時間単位であるＴｉｃｋ−ＩＤを管理するモジュールであり、原則的には実時間に同期している。この同期は、ＮＴＰ（Network Time Protocol）などの既存の安定した実装を用いることで容易に実装することができる。
【００９７】
２つ目のモジュールである［Ｍ２］Ｍｅｍｏｒｙ Ｍａｎａｇｅｒは、後述のＡＰＩをサーバ１０側のロジックに提供することにより、分散共有メモリを管理するモジュールである。Ｍｅｍｏｒｙ  ｍａｎａｇｅｒは、Ｔｉｃｋ−ＩＤを用いてメモリの更新／読み出し操作を直列化する。もし、Ｍｅｍｏｒｙ  ＭａｎａｇｅｒがＴｉｃｋ−ＩＤを用いてデータ競合を検出した場合、ゲームロジック型に例外が通知される。ゲームロジック側は、例えば、プレイヤごとに優先順位を設ける方式や、あるいは、エフェクトで競合状態をごまかすなどの方法（ゲームロジックの処理は設計事項）で、データ競合を解消する。データ競合の問題は、例えば、同一のＴｉｃｋ−ＩＤで、かつ、同一のメモリブロックアドレスへの操作（ｒｅａｄ／ｗｒｉｔｅ）が行われた等である。
【００９８】
最も重要な３つめのモジュールは、カーネル内部で動作する［Ｍ３］Ｃｕｓｔｏｍ Ｌ２ Ｍｕｌｔｉｃａｓｔ Ｍｏｄｕｌｅである。このモジュールは、サーバのＭＡＣアドレスを相互にマルチキャスト先に登録することにより、データリンク層でのパケット転送のネットワーク構造（疑似ＩＰマルチキャストネットワーク構造）を形成する。このネットワーク構造は、ゲームの仮想空間におけるエリア（各サーバ１０が担当するエリア）の近傍関係に対応しており、地理的に近いサーバ１０が接続され、遠いサーバ１０は接続されない。本実施例は、このように連結されたサーバ１０間で共有メモリへの書き込みが、直ちにＬ２パケット転送を通じて共有されるものである。
【００９９】
このＬ２パケット転送について詳述する。パブリッククラウドを構成する仮想ルータの多くは、ＩＰマルチキャストをサポートしておらず、ネットワーク設定だけでマルチキャストを行うことはできない（非特許文献１５参照）。そのため、マルチキャストをクラウドサービス上で活用することは困難だと考えられてきた。
【０１００】
しかしながら、クラウドサービスでは、各ノードのＭＡＣアドレスなどの管理情報を、ルータに頼らずに、クラウドの管理システムから動的に入手することができる。このため、クラウド上のノードは、クラウド全体のノード構造を知ることができる。したがって、各ノードでマルチキャストパケットを処理し、独自にマルチキャストを行うことにより、疑似的にマルチキャストをクラウド上で実装することができる。本実施例では、これを疑似ＩＰマルチキャストと呼ぶ。
【０１０１】
さらに、この疑似ＩＰマルチキャストでは、パケットの送信先を、ＯＳのカーネルが提供するネットワークトラフィック制御機能におけるパケットフィルタの設定だけで変更することができる。このため、柔軟にマルチキャスト処理を変更することも可能になる。従来のオンメモリデータベースの分散処理では、仮想空間の位置関係、というアプリケーション固有の情報はアプリケーションしか持ちえないため、ＯＳレイヤでの最適化処理に用いることはできなかった。本実施例では、データ同期／データ・レプリケーションという、シンプルな情報伝搬に着目することにより、データリンク層での高効率な実装を可能にしている。
【０１０２】
本実施例が提供するＡＰＩについて説明する。本システムを構成するＡＰＩは、５つのコアＡＰＩと、４つの付属ＡＰＩである。
【０１０３】
（１） chain([MAC_ADDRESS1, MAC_ADDRESS2, MAC_ADDRESS3, ... MAC_ADDRESSn])
ｃｈａｉｎ ＡＰＩは、このＡＰＩが起動されたサーバ１０から、ＭＡＣ＿ＡＤＤＲＥＳＳ１〜ｎを有するサーバ１０へのパケット転送設定を行う。これにより、マルチキャストパケットをこのサーバ１０へ送るだけで、ＭＡＣ＿ＡＤＤＲＥＳＳ1〜ｎを有するサーバ１０へＬ２パケット処理だけで転送が行われる。本システムは、このｃｈａｉｎにより連結されたサーバ１０間で、後述のｏｐｅｎで生成されたスマートポインタ経由のメモリ書き込みが、直ちにＬ２パケット転送を通じて共有されるというものである。
【０１０４】
（２） open("key-name(e.g. /root/world1/cell-id)", [READ_ONLY, WRITE_ONLY, RW]) → sptr
ｏｐｅｎ ＡＰＩは、共有メモリへの参照を作成するＡＰＩである。ここで、関数の戻り値であるｓｐｔｒとは、Smart Pointer to Distributed Shared Memoryの略で、共有メモリへの参照を管理するオブジェクトである。ｋｅｙ−ｎａｍｅには、空白を含まない、任意のＡＳＣＩＩ文字列を指定することができる。上述の例のように、"/"等でディレクトリに分かれている必要はない。パケットサイズを不要に圧迫することは好ましくなく、例えば、最大で２５５文字、というような制限を加えることが好ましい。"ｋｅｙ−ｎａｍｅ"のメモリブロックが存在しない場合は、例外が発生する。
【０１０５】
本実施例が提供するメモリブロックの概要図を図１３に示す。すべてのメモリブロック（オブジェクト）にはその時点で格納されている情報が生成／更新された時のＴｉｃｋ−ＩＤが付与される。共有メモリに格納されるオブジェクトのサイズＬ１は固定長であることが好ましい。共有メモリ全体のサイズＬ２もシステム起動時に十分確保され、固定長であることが好ましい。連結リスト等を用いることにより、可変長とすることができるが、ランダムアクセス性能が落ちるため好ましくない。共有メモリは、例えば、固定長オブジェクトの配列としてモデル化され、名前で識別される。
【０１０６】
（３）(write) sptr[i] = a 
これは、共有メモリへの書き込みを行うＡＰＩである。書き込まれたメモリセグメントは直ちにサーバ１０側でレプリケーションされる。このとき、ａとして示されているオブジェクトには、そのオブジェクトの状態が生成されたときのゲーム内時間であるＴｉｃｋ−ＩＤが記録されており、本システムは、メモリブロックへの書き込み時に、その書き込みのＴｉｃｋ−ＩＤを使って、書き込みの直列化をする。
【０１０７】
これにより、メモリへの並列書き込みをロックフリーで実行することができる。同一のＴｉｃｋ−ＩＤで、かつ、同一のメモリブロックアドレス（上記の例ではｉで示されている）への操作が行われたときは、本システムは例外をゲームロジックへ通知する。ゲームロジック側は、例えば、プレイヤごとに優先順位を設ける方式や、あるいは、エフェクトで競合状態をごまかすなどの方法で、データ競合を解消する。変数ａのサイズは静的に決まっていることが好ましいが、完全に動的に処理する場合は、書き込みロジックを工夫すればよい。
【０１０８】
（４）a = sptr[i]
これは、共有メモリからの読み込みを行うＡＰＩである。なお、書き込み時と同様に、変数ａが有するＴｉｃｋ−ＩＤと、当該ブロック［ｉ］に格納されているＴｉｃｋ−ＩＤを比較し、もし、ブロック［ｉ］のＴｉｃｋ−ＩＤが変数ａのＴｉｃｋ−ＩＤと同じか新しいときは、データ競合が発生しているため、本システムは例外をゲームロジックへ通知する。この例外処理は、変数ａの＝演算子により実装される。
【０１０９】
（５）replicate("key-name", index, blocks)
マルチキャストされたＬ２パケットをカーネルが受信すると、このｒｅｐｌｉｃａｔｅ ＡＰＩが呼ばれる。このＡＰＩは、特定のｋｅｙ−ｎａｍｅにバインドされたメモリブロックの、ｉｎｄｅｘ以降のアドレスをｂｌｏｃｋｓで上書きする。ｂｌｏｃｋｓは、１つ以上のオブジェクトを示すバイト列である。本システムでは、同一アーキテクチャの計算機を用いることを想定し、かつ、共有メモリ内にはポインタ等を含まないため、オブジェクトは特別なシリアライズ／デシリアライズ処理を経ずにそのままメモリ内に格納される。"ｋｅｙ−ｎａｍｅ"のメモリブロックが存在しない場合は、不正な状態が発生しているので、深刻なエラーとして処理する。
【０１１０】
本実施例は、カーネルのパケット転送フィルタを用いた疑似ＩＰマルチキャストを設定するための（１）ｃｈａｉｎ ＡＰＩと、共有メモリブロックへの参照を作成する（２）ｏｐｅｎ ＡＰＩ、（３）書き込みＡＰＩ、（４）読み込みＡＰＩ、そして、レプリケーションされるデータがマルチキャストパケットとして到着したときに呼び出される（５）ｒｅｐｌｉｃａｔｅ ＡＰＩを主要なＡＰＩとしている。本実施例は、実質的にはこの５つのＡＰＩにより主要な機能が実装される。以下に示す（６）〜（９）のＡＰＩは、実装上必要なＡＰＩではあるが、本実施例の本質的な機能を提供するものではない。
【０１１１】
（６）close(sptr)
分散共有メモリへの参照を閉じる。スマートポインタなので、スコープを外れれば参照は消えるので、基本的にはｃｌｏｓｅは呼ばなくて良い。
【０１１２】
（７）create("key-name", size)
ｃｒｅａｔｅ ＡＰＩは、ｓｉｚｅ分だけ、分散共有メモリのブロックを、"ｋｅｙ−ｎａｍｅ"の名前で確保する。メモリセグメントの確保命令は、直ちにサーバ１０側でｒｅｐｌｉｃａｔｉｏｎされ、ｃｒｅａｔｅ ＡＰＩコールとして他サーバ１０で処理される。既に"ｋｅｙ−ｎａｍｅ"のメモリブロックが存在する場合は、例外が発生する。
【０１１３】
（８）delete("key-name")
ｄｅｌｅｔｅ ＡＰＩは、"ｋｅｙ−ｎａｍｅ"の名前を有する分散共有メモリのブロックを削除する。メモリセグメントの削除命令は、直ちにサーバ１０側でｒｅｐｌｉｃａｔｉｏｎされ、ｄｅｌｅｔｅ ＡＰＩコールとして他サーバ１０で処理される。"ｋｅｙ−ｎａｍｅ"のメモリブロックが存在しない場合は、例外が発生する。
【０１１４】
（９）resize("key-name", size)
ｒｅｓｉｚｅ ＡＰＩは、"ｋｅｙ−ｎａｍｅ"の名前で確保された分散共有メモリのブロックを、ｓｉｚｅ分だけ、拡張する。メモリセグメントのリサイズ命令は、直ちにサーバ１０側でｒｅｐｌｉｃａｔｉｏｎされ、ｒｅｓｉｚｅ ＡＰＩコールとして他サーバ１０で処理される。"ｋｅｙ−ｎａｍｅ"のメモリブロックが存在しない場合は、例外が発生する。既に確保されているメモリブロックのサイズよりも、指定されたｓｉｚｅが小さい場合は、メモリブロックが縮小するが、メモリサイズを動的に縮小することは好ましくない。
【０１１５】
本実施例は、上述のＡＰＩを実装することにより、Ｔｉｃｋ管理機能を有する任意のサーバ１０に実装することができる。さらに、本実施例の上位層に、より簡便に使用することができるようなオブジェクト指向のラッパーライブラリを実装すれば、サーバ１０の開発者は、あたかも巨大で高速なキー・バリュー・ストアがネットワーク上に存在するかのように、ゲームロジックを実装することができるようになる。
【０１１６】
なお、ＡＷＳ上では、ｔｃ（Traffic Control）コマンドを用いて、Ｌｉｎｕｘ（登録商標）カーネルのパケットフィルタリング機能を利用し、マルチキャストパケットを宛先分コピーして、ＭＡＣアドレスをユニキャストに置き換えて送信する方法を、本実施例の実装に用いることができる。この方法では、データリンク層でパケットをキャプチャし、キャプチャを宛先の分だけコピーして、それぞれの宛先にユニキャストを行う。宛先のＭＡＣアドレスは、ＡＷＳ ＳＤＫにより取得でき、インスタンス名やタグを活用することで、任意のグループのＭＡＣアドレスのみを取得することも可能である。
【０１１７】
＜作用効果＞
以上、本実施形態のゲームシステムでは、互いが担当するエリア間でオブジェクトの行き来が高頻度で行われるサーバ間は、疑似ＩＰマルチキャストネットワーク構造で直接接続し（カーネル上のパケット転送設定において、互いのＭＡＣアドレスを宛先として登録）、プッシュ型の同期で即時かつ高速な同期を行う。プッシュ型の同期の設定を、仮想空間上の地理的関係に基づいて行うことにより、プッシュ型の同期によるデータの共有率（いわゆるキャッシュのヒット率に近い概念）を高く保ちながら、プッシュ同期にかかるＣＰＵ負荷、ネットワーク負荷を低く抑えることができる。
【０１１８】
また、本実施形態では、サーバ間で送受信する更新情報の中に時間情報を含める。そして、この時間情報を用いて、メモリの更新／読み出し操作を直列化する。これによりデータ間の整合性や一貫性を管理することが可能となる。
【０１１９】
また、本実施形態のゲームシステムでは、サーバ１０間で送受信する更新情報の中に時間情報を含める。そして、この時間情報を用いて、メモリの更新／読み出し操作を直列化する。これによりデータ間の整合性や一貫性を管理することが可能となる。
【０１２０】
また、実施例で説明したように、本実施形態のカーネル間のデータ同期経路は、Ｌｉｎｕｘ（登録商標）のｔｃコマンドを用いたシェルスクリプトを記述するだけで実装できる。したがって、本実施形態を導入する実行時のコストは極めて小さい。
【０１２１】
また、本実施形態のゲームシステムは、プレイヤの行動を制限することなく、自由度の高いゲーム内容を有するゲームシステムにおける負荷分散を実現するものであり、オープンワールド型ＭＭＯゲームのみならず、ＦＰＳ（First Person Shooter）などのプレイヤに高い自由度を提供する様々なゲームにも適用可能である。すなわち、本実施形態のゲームシステムは、利便性が高い。
【０１２２】
また、本実施形態のゲームシステムは、独自の仮想マシンやルータを導入することなく、既存のクラウドに実装することが可能である。このため、コスト負担を軽減できる。また、導入のハードルを低くすることができる。
【０１２３】
また、本実施形態のゲームシステムは、ユーザ・エクスペリエンスを損なわずに負荷分散可能である。本実施形態のゲームシステムは、ゲーム性に影響を与えず、完全にクラウド内に閉じて実装されるネットワーク通信の高速化技術であり、プレイヤに一切の強制的な制約を加えずに、負荷分散を行うことが出来る。オープンワールド型ＭＭＯゲームのように、ゲーム世界への没入感を維持することが、ユーザ・エクスペリエンスにとって本質的に重要なジャンルのゲームの場合、この利点は、極めて有効である。既存の方式では、他の世界への移動を明示的に推奨したり、混雑のためにログイン不可能にしたり、強制的にログアウトさせるなどの、ゲーム内のルールとは無関係な仕組みとして、負荷分散が実現されている。
【０１２４】
また、本実施形態のゲームシステムは、ゲーム内におけるプレイヤ間インタラクションを、従来よりも劇的に増加させることが可能である。本実施形態のゲームシステムを適用することにより、どのサーバ１０がどのストレージサーバにアクセスしても、同一のワールド情報を獲得することができるため、１つのエリア内で処理可能なユーザインタラクションの量を、従来の負荷分散技術との比較において増大させることが可能となる。具体的には、ＭＭＯゲームにおける戦闘をより複雑化させたり、アクションを増加させたりしても、スケーラブルにゲームサービスを提供可能となる。
【０１２５】
また、本実施形態のゲームシステムは、非オープンワールド型ＭＭＯゲームの負荷分散技術としても適用可能である。本実施形態のゲームシステムは、複数に世界が分割されたＭＭＯゲームにおいても、１つの世界の中での負荷分散を実現する技術として適用可能である。したがって、既存のＭＭＯゲームの負荷分散技術としても有効である。また、ＦＰＳやＳｅｃｏｎｄ Ｌｉｆｅ型のコミュニケーション・サービスなど、プレイヤ間のインタラクションを伴い、かつ、利用者に高い自由度を提供する幅広いゲームに適用可能である。
【０１２６】
以下、参考形態の例を付記する。
１．  ゲーム空間内の複数のエリア各々を担当し、前記エリア間を移動可能な複数のオブジェクト各々の状態を示すオブジェクト情報を管理する複数のサーバを有するゲームシステムの１つの前記サーバであって、
前記オブジェクト情報を記憶するオブジェクト情報記憶部と、
前記オブジェクト情報記憶部に記憶されている前記オブジェクト情報のうち、担当する前記エリア内に存在する前記オブジェクトの前記オブジェクト情報の更新を行う第１の更新部と、
前記複数のサーバの中の一部である対象サーバのＭＡＣ（media access control）アドレスを記憶するＭＡＣアドレス記憶部と、
前記ＭＡＣアドレス記憶部に記憶された前記ＭＡＣアドレスを宛先としたデータリンク層のデータに基づくパケット転送により、前記第１の更新部による前記オブジェクト情報の更新内容及び更新時のゲーム内時間を示す時間情報を示す更新情報を前記対象サーバに送信する第１の送信部と、
他の前記サーバから受信した前記更新情報に基づき、前記オブジェクト情報記憶部に記憶されている前記オブジェクト情報のうち、担当する前記エリアの外に存在する前記オブジェクトの前記オブジェクト情報の更新を行い、前記時間情報に基づき時系列順の前記オブジェクト情報の更新を実現する第２の更新部と、
を有するサーバ。
２．  前記時間情報は、複数の前記サーバ各々により同一の処理で生成されている１に記載のサーバ。
３．  他の前記サーバからのリクエストに応じて、ＩＰ（internet protocol）通信で、前記オブジェクト情報記憶部に記憶されている前記オブジェクト情報を他の前記サーバに送信する第２の送信部をさらに有する１又は２に記載のサーバ。
４．  前記ＭＡＣアドレス記憶部は、自サーバが担当する前記エリアとの地理的関係が所定条件を満たす前記エリアを担当する前記サーバのＭＡＣアドレスを記憶する１から３のいずれかに記載のサーバ。
５．  前記ＭＡＣアドレス記憶部は、前記サーバにインストールされたＯＳ（operating system）のカーネルが提供するネットワークトラフィック制御機能で設定されたパケット送信先のＭＡＣアドレスを記憶し、
前記第１の送信部による前記対象サーバへの前記更新情報の送信は、前記ＯＳの前記ネットワークトラフィック制御機能で実現される１から４のいずれかに記載のサーバ。
６．  １から５のいずれかに記載の前記サーバを複数有するゲームシステム。
７．  ゲーム空間内の複数のエリア各々を担当し、前記エリア間を移動可能な複数のオブジェクト各々の状態を示すオブジェクト情報を管理する複数のサーバを有するゲームシステムの１つの前記サーバが、
前記オブジェクト情報と、前記複数のサーバの中の一部である対象サーバのＭＡＣアドレスを記憶し、
記憶している前記オブジェクト情報のうち、担当する前記エリア内に存在する前記オブジェクトの前記オブジェクト情報の更新を行う第１の更新工程と、
前記ＭＡＣアドレスを宛先としたデータリンク層のデータに基づくパケット転送により、前記第１の更新工程での前記オブジェクト情報の更新内容及び更新時のゲーム内時間を示す時間情報を示す更新情報を前記対象サーバに送信する第１の送信工程と、
他の前記サーバから受信した前記更新情報に基づき、記憶している前記オブジェクト情報のうち、担当する前記エリアの外に存在する前記オブジェクトの前記オブジェクト情報の更新を行い、前記時間情報に基づき時系列順の前記オブジェクト情報の更新を実現する第２の更新工程と、
を実行する処理方法。
【符号の説明】
【０１２７】
１Ａ    プロセッサ
２Ａ    メモリ
３Ａ    入出力Ｉ／Ｆ
４Ａ    周辺回路
５Ａ    バス
１０    サーバ
１１    オブジェクト情報記憶部
１２    第１の更新部
１３    第１の送信部
１４    ＭＡＣアドレス記憶部
１５    第２の更新部
１６    第２の送信部
２０    プレイヤ端末
３０    インターネット
【要約】      （修正有）【課題】複数のサーバでゲーム空間内のオブジェクトの状態を管理するゲームシステムのデータ同期方式を提供する。【解決手段】ゲーム空間内のエリア各々を担当し、エリア間を移動可能な複数のオブジェクト情報を管理する複数のサーバ１０を有するゲームシステムの１つのサーバ１０であって、オブジェクト情報を記憶するオブジェクト情報記憶部１１と、担当するエリア内に存在するオブジェクトのオブジェクト情報の更新を行う第１の更新部１２と、第１の更新部１２によるオブジェクト情報の更新内容及び更新時のゲーム内時間を示す時間情報を示す更新情報を対象サーバに送信する第１の送信部１３と、他のサーバ１０から受信した更新情報に基づき、記憶されているオブジェクト情報のうち、担当するエリアの外に存在するオブジェクトのオブジェクト情報の更新を行い、時間情報に基づき時系列順のオブジェクト情報の更新を実現する第２の更新部１５と、を有する。【選択図】図４【図１】
0006838187.tif 000002
【図２】
0006838187.tif 000003
【図３】
0006838187.tif 000004
【図４】
0006838187.tif 000005
【図５】
0006838187.tif 000006
【図６】
0006838187.tif 000007
【図７】
0006838187.tif 000008
【図８】
0006838187.tif 000009
【図９】
0006838187.tif 000010
【図１０】
0006838187.tif 000011
【図１１】
0006838187.tif 000012
【図１２】
0006838187.tif 000013
【図１３】
0006838187.tif 000014