2. NetZ の概要
NetZは、ゲームプログラムの設計、実装を効率化できる複製オブジェクト機能や推測航法機能、その他機能を備えています。 また、従来の弊社 DWC ライブラリ に相当するシンプルなバイトデータ転送機能(ダイレクトストリーム)もあります。
2.1. ケースごとに適した実装方法
NetZはさまざまな機能を備えているため、ゲーム開発者は自分のゲームの仕様に適した実装方法を探すところから始める必要があります。
NetZが行う全ての通信は到達保証性を持たないUnreliable通信と到達保証性を持つReliable通信のどちらを使うかを選択できます。 Reliable通信においては複数のサブストリームを使い分けることもできます。
2.1.1. 複製オブジェクトによるデータ共有
ゲームプログラムを新規に開発する場合や、ゲームオブジェクト位置の補間処理を新規に開発する場合、 NEXの複製オブジェクト機能(12.)と推測航法機能(13.)を使用することが考えられます。 複製オブジェクト機能とは、ゲームオブジェクトの通信処理を自動的に行う機能です。 アプリケーションは、ゲーム中で扱うオブジェクトのパラメータを変更するだけでライブラリが自動的に必要な送受信処理を行います。 推測航法機能とは、他のプレイヤーの動き(位置や向きなど)を自然に見えるように補間する機能です。 アプリケーションは、補間方法や更新頻度などを指定するだけで、システムが自動的に必要な送受信処理、補間処理を行います。
2.1.2. リモートメソッドコール
複製オブジェクト機能にはリモートメソッドコール(14.1.)と呼ばれる、ネットワーク上の他の端末の関数を呼び出す機能が含まれています。 弾が発射されたといった特定のイベントを通知する場合に利用が考えられます。 アプリケーションは送受信するデータフォーマットを指定するだけでライブラリが送受信関数を生成し、 同期的にも非同期的にも呼び出すことができます。
2.1.3. ダイレクトストリーム
任意のバイト列を送受信したい場合はダイレクトストリーム(8.)を使用することが考えられます。 リモートメソッドコールを利用した場合でも可変長配列などをデータフォーマットに指定することにより 任意のバイト列を送受信できますが、ダイレクトストリームはよりパフォーマンスに優れます。 例えば DWC ( DS や Wii 向けの通信ライブラリ) 等の従来のネットワークライブラリから移行したい場合や アプリケーション独自のシリアライズ処理を利用したい場合、 大容量のデータを転送したい場合などに適しています。
2.2. ネットワークトポロジー
NetZの端末間接続形態(ネットワークトポロジー)は、以下の3つあります。NetZでは、端末のことをステーションと呼びます。 ステーションのひとつのグループを P2P セッションと呼び、 P2P セッションの管理者のことをセッションマスターと呼びます。
- P2P ネットワークトポロジー: P2P セッションに参加している全てのステーションと直接接続を確立します。
- サーバークライアントトポロジー: セッションマスターを中心としたスター型です。セッションマスター以外のステーション間の接続には、セッションマスターを必ず経由します。
- ハイブリッドネットワークトポロジー: P2P ネットワークトポロジーをベースに、ステーション間の直接接続に失敗した場合のみセッションマスターを経由して通信を行います。
デフォルトのネットワークトポロジーは、 P2P ネットワークトポロジーです。 NetZ オブジェクトを作成する前に、 NetZ::SetNetworkTopology() メソッドを呼び出すことで変更できます。
どのネットワークトポロジーを使用するかは、ゲームの特性に合わせて選択してください。選択の際には Table 2.1 の各ネットワークトポロジーの特徴を参考にしてください。
ネットワークトポロジー | メリット | デメリット |
---|---|---|
P2Pネットワークトポロジー | 直接接続のため遅延が少なく、大きなデータのやり取りに向く | 直接接続に失敗した場合通信ができない |
サーバークライアントトポロジー | セッションマスター経由の通信であるため接続失敗しにくい | データがセッションマスターを経由するので、ホストに負荷がかかり、即時性が低い。ホストマイグレーション拡張機能が使用できない |
ハイブリッドネットワークトポロジー | 直接接続を試みて失敗したときにセッションマスター経由で接続するので、P2Pネットワークトポロジーと比較して接続に失敗しにくい。直接接続した場合にはP2Pネットワークトポロジーのメリットを得られる | 直接接続、セッションマスター経由での接続のどちらの方法で接続されてもゲームに支障のないようなアプリケーションの実装が必要 |
2.2.1. P2P ネットワークトポロジー
NetZ::SetNetworkTopology(NetworkTopology::Peer2Peer);
デフォルトの ネットワークトポロジーは、次の Figure 2.1 に示すように、 すべてのステーションがセッションに参加すると相互に直接接続する P2P ネットワークトポロジーです。 接続できないステーションが一つでもあった場合はセッションに参加しようとしたステーションは切断されます。
ネットワーク環境により、データの送受信に遅延が発生することがあります。特に、複数のリージョンに対応し、リージョン間での P2P 通信を行う場合などは、往復 400 ms 程度の遅延が発生し得ることを考慮しておく必要があります。

Figure 2.1 NetZ の P2P ネットワーク
2.2.2. サーバークライアントネットワークトポロジー
NetZ::SetNetworkTopology(NetworkTopology:: ClientServer);
サーバークライアントネットワークトポロジーでは、 Figure 2.2 に示すように、セッションマスターでパケットを中継するルータ機能を用いて、 セッションマスター以外のステーションと間接的に接続します。サーバーがゲームから切断されると、すべての接続が失われ、ゲームは終了します。
セッションマスターにさえ接続できれば、ステーション間の接続性が保証されるため、一部クライアントステーション間のNATトラバーサルの失敗により、 接続処理全体が失敗になる可能性がなくなります。NATトラバーサルとは、NAT(Netowork Address Translation)を使用している環境下において、 P2P 通信を確立するための機能です。
ただし、 P2P ネットワークに比べてセッションマスター以外のステーション間の伝送遅延が倍以上に増大し、セッションマスターへのCPU負荷やネットワーク負荷が増大します。

Figure 2.2 NetZ のサーバークライアントネットワーク
2.2.3. ハイブリッドネットワークトポロジー
NetZ::SetNetworkTopology(NetworkTopology:: Hybrid);
ハイブリッドネットワークトポロジーは、 P2P ネットワークのようにすべてのステーションが相互に直接接続するネットワークをベースに、 NATトラバーサルが不可能な場合、具体的には相性の悪いルータ同士の配下にある直接接続できないステーション同士では、セッションマスター経由の通信に切り替えて ステーション間の通信を確立させるネットワークトポロジーです。 セッションマスター経由の通信への切り替えは、セッション参加後のステーション間の直接接続の確立に失敗した場合に行われます。 セッションマスターが切り替わると、新たなセッションマスターに直接接続していないステーションはすべて切断されます。
注意
ハイブリッドネットワークトポロジーではセッションマスターがステーション間の通信を転送するため、 セッションマスターにかかる通信負荷を考慮した設計が必要となります。 また、セッションマスターを経由することにより通信遅延が増加します。
セッション全体に対するセッションマスター経由の通信の数を取得するには、 あらかじめRootTransport::SetRoutingHistoryUpdateSpanに0より大きい値を設定しておいたうえで、 Session::GetNumOfRoutingConnectionsを使用します。 Station::GetNumOfRoutingConnectionsで、ステーション単位のセッションマスター経由の通信の数を取得できます。 どちらもセッションマスターでのみ呼び出せます。
// セッションマスター経由通信の履歴更新間隔の設定
RootTransport::SetRoutingHistoryUpdateSpan(2000);
while (1) {
// アプリケーションの処理
SampleAppUpdate();
// NEXの処理を実行
Scheduler::GetInstance()->DispatchAll();
// セッションマスター経由の通信の数の取得
qUnsignedInt32 num = Session::GetNumOfRoutingConnections();
}
次の Figure 2.3 では、 ステーション2とステーション4の間以外の通信は相互に直接通信し、 ステーション2とステーション4の間の通信はセッションマスター経由での通信となっている様子を示しています。

Figure 2.3 NetZ のハイブリッドネットワークトポロジー