PhotonのIPv6対応情報
& Server構築ポイント
Photon 運営事務局
シニアテクニカルアドバイザー
並木 健太郎
アジェンダ
• Photonのご紹介
• iOSのIPv6対応
• PhotonにおけるIPv6対応
• Photon Server構築ポイント
• Photon最新情報
Photonのご紹介
Photonのしくみ
• すべてのクライアント(=プレ
イヤー)はサーバーへ接続
する
• サーバーはクライアント間
の通信をリレーする役割
• サーバー自身は基本的に
は処理を行わないが、
WebhooksやPluginを利用し
てカスタマイズも可能
Photon
Client Client Client
SDK SDK SDK
Photonのサービス形態
• クラウド型サービス
• サーバーはサービス提供
元で運用
• クライアントにSDKを組み込
むだけで利用可能
• ミドルウェア型サービス
• ソフトウェアとしてご提供、
お客さまで運用
• サーバーサイドのカスタマ
イズが自由に
Photon Cloudのラインナップ
汎用性の優れたスタンダードなRealtime
Unity向けに特化されたUnity Networking
Chatに特化したサービスのChat
音声通話を簡単に導入できるVoice
Photon Enterprise Cloud
• Photon Cloudの上位サービスとして、
Photon Enterprise Cloudをご用意しています
• Photon Cloudでは難しいと思われる場合でも、
Enterprise Cloudなら大丈夫です!
Cloud vs. Enterprise Cloud
Cloud
• Publicサービス (共有)
• 10,000CCUまで
• Webhooks対応
• 複数タイトル共有不可
• サーバー設定変更不可
Enterprise Cloud
• Privateサービス (専有)
• CCU上限なし
• Webhooks & Plugin対応
• 複数タイトル共有可能
• サーバー設定変更可能
iOSのIPv6対応
iOSのIPv6対応とは
• 昨年(2015)のWWDCにて、iOS 9においてIPv6
への移行を発表
• Apple Storeに登録するiOSアプリのIPv6対応
を必須とする
– 当初は2015年末からと言っていたが、一旦未定
になり、今年の5/4に6/1からと発表になった
どういうこと?
• キャリアネットワークか
らiOS端末に付与される
IPアドレスがIPv6のみと
なっても大丈夫なように
しておく
出典: iOS Developer Library
10.0.10.1
2001:db8:0:0:1::1
てことは…
• IPv4ネットワークに接続されていることを前提
にしているアプリは問題になる
ということは、
• IPv4でしか使えないAPIの利用や、IPv4アドレ
スを直接扱っていると問題となる
IPv4でしか使えないAPI
• IPv4のみに対応したデータ型
– uint32_t, in_addr, sockaddr_t
• IPv4のみに対応したAPI
– inet_aton, gethostbyname
• IPv4のみでしか使えない使い方をしたAPI
– gethostbyname2(hostname, AF_INET);
IPv4アドレスの扱い
• 接続先として、IPv4アドレス形式で持っている
– "192.168.1.1"
– "http://172.16.10.1/api/v1"
• ネットワーク接続の確認として、
– IPv4アドレスを持っているかどうか
– "0.0.0.0"に接続できるかどうか
どうすればいいの?
• アドレスファミリに依存しない高レイヤーのフ
レームワーク、APIを使う
– NSURLSession, CFNetwork
• Apple曰く、HTTPの通信はどちらかを使ってい
るから、みんな影響ないでしょ?
– まぁHTTPだけならね…
HTTP以外の通信
• Socketを直接使ってる場合の対応法
– CFNetworkに移行する
– アドレスファミリAF_INET6にも対応する
どっちもどっちかな…
サーバー側は…?
• クライアント側はIPv6対応しなきゃいけないの
はわかったけど、サーバー側はどうするの?
• クライアントのネットワークはキャリアだったり
ユーザー任せだからいいけど、サーバー側っ
て自分たちの管理だし、それもIPv6対応する
のってものすごく大変では…?
サーバーは大丈夫!
• サーバー側は"基本的
には"何もしなくていい
です
• キャリアがIPv6<->IPv4
ネットワーク間の変換を
行ってくれます (将来)
出典: iOS Developer Library
DNS64
• IPv4アドレス(=Aレコー
ド)しか持たない場合で
も、IPv4を内包したIPv6
アドレスを生成する
• クライアントにはIPv6と
して見える
出典: iOS Developer Library
NAT64
• DNS64で生成された
IPv6アドレスへの接続
をアドレス変換してIPv4
ネットワーク上で接続
• クライアントとサーバー
それぞれはGatewayと
接続する形となる
出典: iOS Developer Library
一般的なまとめ
• アプリはIPv6対応APIを使いましょう
• サーバー側はIPv6クライアント群はすべて
NAT配下からアクセスがあると思えば基本は
OK
PhotonにおけるIPv6対応
PhotonにとってのIPv6対応
• Photonにとっては棘の道でした…
– Photonのプロトコルに起因する問題
– Photonの接続に関する問題
– Unityの対応に関する問題
• 今は全て解決しています!
プロトコルに起因する問題
• トランスポートとして基本はUDPを利用
– 高レベルAPIの利用は難しい
– 高効率のための独自ロジック
• Client SDKを改修することにより対応
接続に関する問題
• Photonを利用する際、一般的に複数回の接
続が発生する
– Name Server -> Master Server -> Game Server ->
Master Server -> Game Server …
• 接続先を指示する際のアドレス表記の問題
が発生!
Photonのサーバーレイヤー
• クラウドの場合は3段
– Name Server (NS)
– Master Server (MS)
– Game Server (GS)
• Photon Serverの場合は
2段
– Master Server (MS)
– Game Server (GS) 出典: doc.photonengine.com
次のサーバーへの接続
• ルーム作成時はMSより
ルームを作るべきGSの
アドレスをもらう
• 今までの実装ではIPv4
のアドレスをクライアン
トに渡していたので、
IPv6ネットワークでは接
続できない
Client MS GS
ルーム作成
GSアドレス通知
"192.168.1.1"
接続不可!
接続
IPv6への対応法 〜Native〜
• GSはIPv4とIPv6それぞ
れのアドレスを持ち、そ
れをMSへ通知しておく
• MSはClientとの接続の
アドレスファミリを確認
して、アドレスファミリと
一致したアドレスを返す
Client MS GS
ルーム作成
GSアドレス通知
"fe80:xxxx:…"
AF判定
接続
IPv6への対応法 〜Bridge〜
• GSはIPv4と「ホスト名」を
持ち、それをMSへ通知し
ておく
• ClientはIPv6接続の場合
にIPv6フラグを立ててリク
エストする
• MSはフラグを確認して、
フラグ立っている場合は
ホスト名を返す
Client MS GS
ルーム作成 w/IPv6
GSアドレス通知
"gs1.aaa.com"
フラグ確認
接続
Unityに関する問題
• PhotonはUnityと一緒に
使われるケースが多い
• Unityのソケット部分は
IPv6で全然動かず
• サービス提供元のExit
Gamesが尽力してUnity
のバグフィックスを行っ
た
IPv6対応バージョン
• Client SDK
– Native SDK: 4.1.0.0以降
– .NET SDK: 4.1.0.0以降
– PUN: 1.67以降
• Server SDK: 4.0.28以降
• Cloudサービス: 対応済
対応させるための設定は?
• Photon Cloud利用の場合
– 対応するSDKにバージョンアップすればOK
– 接続の設定などは一切変更する必要なし
• Photon Server利用の場合
– 対応するSDK(Client, Server)にバージョンアップ
– Master Serverの接続先にホスト名(FQDN)を設定する
– Game ServerのPublicHostNameの設定を行う
Master Serverの接続先設定
• Native SDKの場合
int main(void) {
…
client.connect(
serverAddress: L"ms.game.some.com”,
serverType: ServerType::MASTER_SERVER
);
• PUNの場合
Photon IPv6まとめ
• 今は全てIPv6に対応済み
• Cloud利用の場合はClient SDKのアップデート
でOK
• Server利用の場合は、Client & Server SDKの
アップデート、各サーバーへのFQDN設定、接
続先のFQDN設定、GSのFQDN設定
Photon Server構築のポイント
構築のポイント
• Photon Serverのインストールは非常に簡単!
– exeを実行して展開、Photon Controlを起動して、
インスタンスを起動
• 実運用するにあたり、複数台の設定やIPv6に
関する設定などをご紹介
Master ServerとGame Server
• 実運用においては、複数台構成になることが
ほとんど
• 2種類のサーバーがある
– ロビー&バランシングを行うMaster Server
– ゲームの実処理を行うGame Server
それぞれの設定方法
• 実は、Photonのヘルプセンターに記事があり
ます!こちらをご覧ください!
– https://support.photonengine.jp/hc/ja/articles/21
4923898
IPv6 Bridge接続への対応
• IPv6の項目でも話ましたが、IPv6 Bridge接続に対
応させるには追加の設定が必要
• Game ServerのPhoton.LoadBalancing.dll.configを
編集
– 162行目からのPublicHostNameにFQDNを記載
• <setting name="PublicHostName" serializeAs="String”>
<value>gs1.game.some.com</value>
</setting>
台数はどう決めればいいの?
• ゲームの内容次第です!(きっぱり)
• なんて言ってちゃ身も蓋もないので、おおま
かな目安を伝授します!
Game Server
• 4Core CPU / 4GB Memoryのサーバーで1000-
2000CCUを目安
• 上記スペックで1000CCUを基準として、負荷試験
を行って上限をアップする検討を
• スケールアップより、スケールアウトが効果的
• 大きなサーバーで数を収めるのではなく、小さな
サーバーで数を調整するほうが柔軟に対応可能
Master Server
• 4Core CPU / 4GB Memoryで40000CCUが目安
• 実際はロビー・ルーム数の影響が大きい
• 大規模な利用を想定する場合は、予め複数
のクラスタセット(Master&Gameのセット)を利
用することを想定してクライアントを設計を
パフォーマンスチューニング
• よく聞かれますが…、
基本はWindowsもPhotonもデフォルト設定で
お使いください!
• MMOのような使い方は別ですが、一般的な
MOのような使い方なら下手にいじらないほう
がよいですw
最後に
新サービス
• 新しいサービスがリリース予定!
– Photon Swarm
– Photon Thunder
– Photon TrueSync
• 詳細は改めてお知らせします!
今後の予定
• 8/3(水) XFLAG(mixi) x Photon勉強会@GMO Yours
• 8/24-26 CEDEC 2016@横浜
セッション、Photonワークショップ
PlayCanvasワークショップ
この後も続々開催予定!
ヘルプセンター始めました
• ナレッジベースや、コミニュティ(フォーラム)機
能のあるヘルプセンターを開設しました
• コンテンツの充実化を図っていきますので、
ぜひご利用ください!
• https://support.photonengine.jp/hc/ja
お問い合わせ
• メールアドレス
– developer@photonengine.jp
• Webもご覧ください
– http://photonengine.jp/
• ヘルプセンター
– https://support.photonengine.jp/hc/ja
最後に…
一緒に働ける仲間を
大募集中!
詳細はこちら↓
ありがとうございました!
developer@photonengine.jp

PhotonのIPv6対応情報 & Server構築ポイント