Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
安心してください!対応してますよ!
〜Webhooks & IPv6対応の最新情報
Photon 運営事務局
シニアテクニカルアドバイザー
並木 健太郎
はじめに
• お伝えしたいことが多くてスライドの量が非常
に多いです…
• スライド進行はやや早めになるかと思います
が、ご了承ください
アジェンダ
• マルチプレイに必要な機能とは
• Photonでできること
• Webサービスとのつなぎ方 (Webhooks)
• Photon Server V3 vs. V4
• IPv6対応
• 事例ご紹介
マルチプレイに必要な機能とは
マルチプレイの要件
• 複数のプレイヤーがリアルタイムで同じゲー
ム内で楽しめること
– 対戦だったり、協力だったり
• 複数のプレイヤー間(=アプリ間)で通信を行っ
て、リアルタイムでデータのやり取りを行う必
要がある
やり取りが必要な情報
• 例えば
– 衝突判定の結果
– キャラクタの位置・状態
• いろいろデータの種類
はあれども、基本的に
はデータのやりとりがで
きればいい
Player
A
Player A
Enemy
Attack
Player B...
やりたいこと
• 右の例は極端ですが…、
基本的にはこれができ
れば大丈夫なはず
• 送信側は任意のデータ
送信ができ、受信側は
それを受け取れる
Player A (送信側)
// イベント情報
ev = "event";
// イベント送信...
どう実現する…?
• プレイヤー間でのデータやり取りだから、P2Pで
直接Socketで繋げばいい!
– ホストの管理は?NAT越えどうする?
• Socket Server立てる!
– Serverのコードはどうする?運用は?
• Node....
面倒くさいことは任せるべき!
• 通信とか、ゲームの本質ではない部分は外
に任せて、本質であるコンテンツやゲームシ
ステムに集中してほしい
• 通信部分はPhotonにお任せください!
Photonでできること
これができます!
• イベント送受信はほぼ
この形でできます!
• 送信先の指定や細や
かな設定もできます
Player A (送信側)
// イベント情報
ev = "event";
// イベント送信
sendEvent(ev);
Play...
つなぐまでも簡単!
• マッチメイキングの要件
にもよりますが、シンプ
ルに使うなら数行で接
続完了!
• ソケット周りのことは一
切考えなくて大丈夫で
す
main() {
connect();// Masterへ接続
}
onConnect...
こんなこともできます
• ゲーム単位(ルーム)で変
数を共有することが可能
• 例えば、ゲームの進行状
態とか、残り時間とか
• レイドバトルのような場合
は敵キャラの状態とかも
ここで管理する方法も
Player
A
Player B Pla...
Photonの主な機能
• ロビー
– 名前付ロビー
– マッチメイキング
– プレイヤー検索
• ルーム
– 人数制御・表示制御
– カスタムプロパティ
• 同期関連
– オブジェクト同期
– イベント通知
– RPC
• Webhooks/...
Photonのしくみ
• すべてのクライアント(=プレ
イヤー)はサーバーへ接続
する
• サーバーはクライアント間
の通信を仲介する役割
• サーバー自身は基本的に
は処理を行わないが、
WebhooksやPluginを利用し
てカスタマイズ...
SDK対応プラットフォーム
Unity Corona Marmalade
Unreal Engine Cocos2d-x Xamarin
Andorid iOS BlackBerry
JavaScript, HTML5 Linux Mac OS...
Webサービスとのつなぎ方 (Webhooks)
Webhooks最新情報
• Webhooksが1.2となってアップデートされまし
た
– 非同期Join
– GameEvent/GamePropertiesでのState送信指定
– カスタムHTTPヘッダ
• Webhooks/WebRP...
大前提として…
• Photonはストレージ機能などは一切持ってい
ません
• アカウント管理などで何かしらのストレージが
必要になる場合が一般的
• データ保存に関しては、今まで通りWebサー
ビス&ストレージ(DBなど)で作ってください
WebサービスとPhoton
• WebサービスとPhotonは
必ずしもつなげる必要は
ありません
• Webサービスでマルチプ
レイの準備をして、
Photonでマルチプレイを
行い、その結果をWeb
サービスに戻せば基本
的にはOK
Cl...
同時には使えないの…?
• Photon利用中にクライ
アントから直接Web
サービスを呼び出すこ
とはもちろん可能
• 同期などを考えると、ク
ライアントが同時に2つ
のサービスと通信する
のは現実的ではない
Client Photon We...
Webhooksを使いましょう
• PhotonからWebサービスを
呼び出す仕組みである
Webhooksを使うべき
• Photonのイベントと同期し
てWebサービスが呼び出さ
れるので、タイミングの心配
はなし
• クライアントはPho...
で、何に使うの…?
• 基本的に、データの方向はPhoton -> Webサービ
スの片方向です
• 一番わかりやすいのはマルチプレイのログ取得
• 長いゲームの場合、ルーム情報の保存やプレイ
ヤー情報の保存、プレイヤーの再入室のサポー
トなど...
どう使うの…?
• Photonのダッシュボード上で基底URLを設定
して、各イベントのPathを設定
• いろいろな情報がJSONで渡ってくるので、そ
れらを見て問題がなければResultCode:0を返
せばOK!
• …以上ではありますが...
Webサービス側の実装は…?
• パラメータはJSONで渡されます
• 戻り値もJSONで渡します
• JSONが取扱えれば言語などは一切問いません
• githubにサンプルもあります
• 私はPHPでも作りましたが全く問題なかったです
まずダッシュボードの設定
• タイプはWebhooks 1.2b
• BaseUrlにURLのベース
部分を指定
• Path…(Close,Create…)に
は各イベント毎のPath
を指定
ダッシュボードの設定の続き
• HasErrorInfo: Webhooksで
のエラー情報をクライアント
側で受け取るか否か
• IsPersistent: ルームの保存
を行えるよう、メモリから
ルーム情報を消す前に呼
び出すか否か
• A...
各イベント(Path)について
• 下記のPathがあります
– GameCreate
– GameJoin
– GameProperties
– GameEvent
– GameLeave
– GameClose
GameCreate
• ルームが作成された時に呼ばれる
(Type: "Create")
• 再入室におけるルーム再開の時も呼ばれる
(Type: "Load")
• ルーム再開の場合は、保存されているStateを戻す
必要がある
– Sta...
GameJoin
• プレイヤーが既存のルームに入室・再入室し
た場合に呼ばれる
(Type: "Join")
GameProperties
• ルームやプレイヤーのカスタムプロパティを
設定する時に、HttpForwardをtrueにすると送
られる
– クライアントがカスタムプロパティを設定する時の
パラメータで、呼ぶか呼ばないかを制御可能
• ルー...
GameEvent
• イベント送信時に、HttpForwardがtrueにする
と送られる
– クライアントがイベントを送信する際にパラメータ
で呼ぶか呼ばないかを制御可能
– Type: "Event"
GameLeave
• プレイヤーがルームから退室(切断)する時に呼
ばれる
• 切断理由別にTypeが設定される
– ClientDisconnect, ClientTimeoutDisconnect,
ManagedDisconnect, ...
GameClose
• ルームの情報がPhotonのメモリから消える時
に呼ばれる
• IsPersistentがtrueなら、メモリから消す前に
Type: "Save"としてルームの情報(State)と共に
呼ばれる
• IsPersist...
お伝えしきれなかったこと
• ちょいちょい出てきてますが、ルームの情報を外
部に保存してセーブ機能を実現できます
• パラメータなどはドキュメントをご参照ください
• http://doc.photonengine.com/ja/realtim...
WebRPCとは
• Webhooksはイベントをフックして情報を送信
するもの
• WebRPCはPhoton経由で任意のタイミングで
Webサービスをパラメータ付きで呼び出し、
Webサービスからデータを返すことができる
• WebRPCは...
呼び出し方
• PhotonのAPIにて
– Native SDK
Client::opWebRpc((Path名), (パラメータ))
– PUN
PhotonNetwork.WebRpc((Path名), (パラメータ))
• Path名は...
渡せるデータ型
• Photonが扱えてSerializeできる型はJSONに変換
されて渡されます
• Webサービスからのデータは適宜変換されて戻
されます
• 詳細はドキュメントを参照してください
• http://doc.photone...
Webhooks最新情報
• Webhooksが1.2となってアップデートされまし
た
– 非同期Join
– GameEvent/GamePropertiesでのState送信指定
– カスタムHTTPヘッダ
• Webhooks/WebRP...
Webhooksまとめ
• Photonの中で起こったイベントに対して呼ばれる
のがWebhooks
• Webサービスのデータのやり取りを行うのは
WebRPC
• 1.2へのアップデートやRealtimeでも利用可能に
なり、可能性が広がり...
Photon Server V3 vs. V4
Photon Server V4リリース
• Photon Server V4
ようやくリリースされま
した
• ダッシュボードからダウ
ンロードできます
Photon Server V3 vs. V4
• HTTP(S)サポート
• クラウドの新機能も利用可能に
• プラグイン対応
• カウンタリニューアル
• IPv6対応
ここでお話します
第2部、第3部にて
この後で!
クラウドの(=V4から使える)新機能
• Webhooks/WebRPC
– Webサービス連携 (もう説明不要ですよね…)
• カスタム認証
– 接続時のユーザー認証をWebサービス経由で行える
• クラウドセーブ
– ルームの情報を一時的に...
カスタム認証
• Photonへの接続時にUsername/Tokenを渡し
てもらい、さらにWebサービスへ渡して認証を
行うことが可能
• 個々のプレイヤー認証だけではなく、アプリ認
証(不正クライアント対策)に使うことも可能
– User...
クラウドセーブ
• ルーム作成時にRoomTTLを設定することによ
り、TTLの期間内はルーム情報を保持するこ
とが可能
• ボードゲームで一時休止とかが簡単に実現
可能
• 認証はルーム名だけではなく退室時に渡す
Tokenで行う
再入室対応
• プレイヤーがルームから抜けた後、同じルー
ムに入ることができる機能
• ゲームの一時中断はもとより、意図しない切
断からの再開などにも使えます
• カスタム認証のUsernameがキーになる
• 今のところPUNは非対応
V3 vs. V4まとめ
• クラウドでの新機能が取り込まれより便利に
• 直接のカスタマイズなしでも可能性が大きく
• より安定したPhoton Serverをお試しください
IPv6対応
なぜIPv6対応が必要…?
• AppleがiOS 9向けアプリにおいて、IPv6対応を
必須とする発表を行った
• 当初は2015年末から、というスケジュール
だったが、延期され2016年初頭に (まだ未定)
• Photonも当然ながらネッ...
IPv6に対応することとは…?
• クライアントがIPv6の接続しか持たない状況
でも、問題なく動作できるようにする
ということは、
• IPv4でしか使えないAPIの利用や、IPv4アドレ
スを直接扱っていると問題となる
IPv4でしか使えないAPI
• IPv4のみに対応したデータ型
– uint32_t, in_addr, sockaddr_t
• IPv4のみに対応したAPI
– inet_aton, gethostbyname
• IPv4のみでしか使え...
IPv4アドレスの扱い
• 接続先として、IPv4アドレス形式で持っている
– "192.168.1.1"
– "http://172.16.10.1/api/v1"
• ネットワーク接続の確認として、
– IPv4アドレスを持っているかどうか...
対応策
• アドレスファミリに依存しない高レイヤーのフ
レームワーク、APIを使う
– NSURLSession, CFNetwork
• IPv4アドレスは文字列として処理する
– OSがIPv6アドレスと同様によろしく処理してくれる
サーバー側は…?
• クライアント側はIPv6対応しなきゃいけないの
はわかったけど、サーバー側はどうするの?
• クライアントのネットワークはキャリアだったり
ユーザー任せだからいいけど、サーバー側っ
て自分たちの管理だし、それもIPv6対応...
サーバーは大丈夫!
• サーバー側は"基本的
には"何もしなくていい
です
• キャリアがIPv6<->IPv4
ネットワーク間の変換を
行ってくれます (将来)
出典: iOS Developer Library
DNS64
• IPv4アドレス(=Aレコー
ド)しか持たない場合で
も、IPv4を内包したIPv6
アドレスを生成する
• クライアントはIPv6とし
て見える
出典: iOS Developer Library
NAT64
• DNS64で生成された
IPv6アドレスへの接続
をアドレス変換してIPv4
ネットワーク上で接続
• クライアントとサーバー
それぞれはGatewayと
接続する形となる
出典: iOS Developer Library
Photonはどうなの…?
• ほぼ対応は完了しています!
• Client SDKはNative SDKの対応は完了済
– 4.0.5.0でIPv6 Nativeに対応
– 4.1.0.0でBridge(NAT64+DNS64)にも対応
• ...
Unityの対応状況
• Unity5において、IPv6でのSocketの挙動に問題
があり、.NET SDKとPUNは動作しない
• Unity社での問題認識、バグ修正、確認までは完
了済
• いくつかの修正はまだリリースされていないので、
...
サーバー側は?
• 対応は完了しています!
• Server SDKは4.0.28にて対応済
– RC5にてIPv6 Nativeに対応
– 4.0.28にてBridgeにも対応
• Publicクラウドサービスはすでに対応済
• Enterp...
Photonのサーバーレイヤー
• クラウドの場合は3段
– Name Server (NS)
– Master Server (MS)
– Game Server (GS)
• Photon Serverの場合は
2段
– Master Se...
次のサーバーへの接続
• ルーム作成時はMSより
ルームを作るべきGSの
アドレスをもらう
• 今までの実装ではIPv4
のアドレスをクライアン
トに渡していたので、
IPv6ネットワークでは接
続できない
Client MS GS
ルーム作成...
IPv6への対応法 〜Native〜
• GSはIPv4とIPv6それぞ
れのアドレスを持ち、そ
れをMSへ通知しておく
• MSはClientとの接続の
アドレスファミリを確認
して、アドレスファミリと
一致したアドレスを返す
Client ...
IPv6への対応法 〜Bridge〜
• GSはIPv4と「ホスト名」を
持ち、それをMSへ通知し
ておく
• ClientはIPv6接続の場合
にIPv6フラグを立ててリク
エストする
• MSはフラグを確認して、
フラグ立っている場合は
ホ...
IPv6対応まとめ
• Unity対応でお待たせして恐縮ですが、見通し
は立っていますので、今しばらくお待ち下さい
• サーバー側は準備万端です!
• Native SDKをご利用の場合は、最新SDKへの
アップデートをお願いします
最後に
まとめ
• 進化したWebhooksでWebサービス連携が使
いやすく!Realtimeでも利用可能です!
• Photon Server V4もリリースされました!
• サーバー側のIPv6は万全!クライアント側の
アップデート準備をお願いし...
今後の予定
• 第2部: 4/5(月)-6(火) Unite 2016 Tokyo
セッション登壇します!
Enterprise CloudとPluginで実現している『FINAL
FANTASY GRAND MASTERS』の事例をプロデュー...
ヘルプセンター始めました
• ナレッジベースや、コミニュティ(フォーラム)機
能のあるヘルプセンターを開設しました
• コンテンツの充実化を図っていきますので、
ぜひご利用ください!
• https://support.photonengine...
お問い合わせ
• メールアドレス
– developer@photonengine.jp
• Webもご覧ください
– http://photonengine.jp/
• ヘルプセンター
– https://support.photonengi...
最後に…
一緒に働ける
を大募集中!
(その他営業なども)
ありがとうございました!
developer@photonengine.jp
Upcoming SlideShare
Loading in …5
×

Photon Webhooks & IPv6対応の最新情報

932 views

Published on

PhotonのWebhooksの利用方法とIPv6対応について、ご説明しています。

Published in: Internet
  • Light and its nature have caused a lot of ink to flow during these last decades. Its dual behavior is partly explained by (1)Double-slit experiment of Thomas Young - who represents the photon’s motion as a wave - and also by (2)the Photoelectric effect in which the photon is considered as a particle. A Revolution: SALEH THEORY solves this ambiguity and this difficulty presenting a three-dimensional trajectory for the photon's motion and a new formula to calculate its energy. More information on https://youtu.be/mLtpARXuMbM
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

Photon Webhooks & IPv6対応の最新情報

  1. 1. 安心してください!対応してますよ! 〜Webhooks & IPv6対応の最新情報 Photon 運営事務局 シニアテクニカルアドバイザー 並木 健太郎
  2. 2. はじめに • お伝えしたいことが多くてスライドの量が非常 に多いです… • スライド進行はやや早めになるかと思います が、ご了承ください
  3. 3. アジェンダ • マルチプレイに必要な機能とは • Photonでできること • Webサービスとのつなぎ方 (Webhooks) • Photon Server V3 vs. V4 • IPv6対応 • 事例ご紹介
  4. 4. マルチプレイに必要な機能とは
  5. 5. マルチプレイの要件 • 複数のプレイヤーがリアルタイムで同じゲー ム内で楽しめること – 対戦だったり、協力だったり • 複数のプレイヤー間(=アプリ間)で通信を行っ て、リアルタイムでデータのやり取りを行う必 要がある
  6. 6. やり取りが必要な情報 • 例えば – 衝突判定の結果 – キャラクタの位置・状態 • いろいろデータの種類 はあれども、基本的に はデータのやりとりがで きればいい Player A Player A Enemy Attack Player B Player C 通知 通知 Player B
  7. 7. やりたいこと • 右の例は極端ですが…、 基本的にはこれができ れば大丈夫なはず • 送信側は任意のデータ 送信ができ、受信側は それを受け取れる Player A (送信側) // イベント情報 ev = "event"; // イベント送信 sendEvent(ev); Player B (受信側) // イベント受信メソッド OnReceiveEvent(ev) { if (ev == "event") { // 何か処理 }
  8. 8. どう実現する…? • プレイヤー間でのデータやり取りだから、P2Pで 直接Socketで繋げばいい! – ホストの管理は?NAT越えどうする? • Socket Server立てる! – Serverのコードはどうする?運用は? • Node.js使うぜ! – Serverの運用は?メンテナンスは? とにかく面倒くさいですw
  9. 9. 面倒くさいことは任せるべき! • 通信とか、ゲームの本質ではない部分は外 に任せて、本質であるコンテンツやゲームシ ステムに集中してほしい • 通信部分はPhotonにお任せください!
  10. 10. Photonでできること
  11. 11. これができます! • イベント送受信はほぼ この形でできます! • 送信先の指定や細や かな設定もできます Player A (送信側) // イベント情報 ev = "event"; // イベント送信 sendEvent(ev); Player B (受信側) // イベント受信メソッド OnReceiveEvent(ev) { if (ev == "event") { // 何か処理 }
  12. 12. つなぐまでも簡単! • マッチメイキングの要件 にもよりますが、シンプ ルに使うなら数行で接 続完了! • ソケット周りのことは一 切考えなくて大丈夫で す main() { connect();// Masterへ接続 } onConnectedMaster() { opJoinRandomRoom(); // ランダムマッチ } onFailedJoinRandomRoom() { opCreateRoom(); // Roomがないので作成 } onJoinedRoom() { // Roomに入ったので、実際の処理を開始 }
  13. 13. こんなこともできます • ゲーム単位(ルーム)で変 数を共有することが可能 • 例えば、ゲームの進行状 態とか、残り時間とか • レイドバトルのような場合 は敵キャラの状態とかも ここで管理する方法も Player A Player B Player C Player A Stage: B Remain time: 0:36 Boss HP: 89 Player B Player C Boss
  14. 14. Photonの主な機能 • ロビー – 名前付ロビー – マッチメイキング – プレイヤー検索 • ルーム – 人数制御・表示制御 – カスタムプロパティ • 同期関連 – オブジェクト同期 – イベント通知 – RPC • Webhooks/WebRPC • Plugin
  15. 15. Photonのしくみ • すべてのクライアント(=プレ イヤー)はサーバーへ接続 する • サーバーはクライアント間 の通信を仲介する役割 • サーバー自身は基本的に は処理を行わないが、 WebhooksやPluginを利用し てカスタマイズも可能 Photon Client Client Client SDK SDK SDK
  16. 16. SDK対応プラットフォーム Unity Corona Marmalade Unreal Engine Cocos2d-x Xamarin Andorid iOS BlackBerry JavaScript, HTML5 Linux Mac OS X PlayStation PlayStation Mobile Xbox dotNet Silverlight Windows (Win32) Windows8 RT Windows Phone Windows8 Phone
  17. 17. Webサービスとのつなぎ方 (Webhooks)
  18. 18. Webhooks最新情報 • Webhooksが1.2となってアップデートされまし た – 非同期Join – GameEvent/GamePropertiesでのState送信指定 – カスタムHTTPヘッダ • Webhooks/WebRPCがTurnbasedだけではなく Realtime, Serverでも利用可能に!
  19. 19. 大前提として… • Photonはストレージ機能などは一切持ってい ません • アカウント管理などで何かしらのストレージが 必要になる場合が一般的 • データ保存に関しては、今まで通りWebサー ビス&ストレージ(DBなど)で作ってください
  20. 20. WebサービスとPhoton • WebサービスとPhotonは 必ずしもつなげる必要は ありません • Webサービスでマルチプ レイの準備をして、 Photonでマルチプレイを 行い、その結果をWeb サービスに戻せば基本 的にはOK Client Client Web Service準備 Client Client Photonマルチプレイ Client Client Web Service結果
  21. 21. 同時には使えないの…? • Photon利用中にクライ アントから直接Web サービスを呼び出すこ とはもちろん可能 • 同期などを考えると、ク ライアントが同時に2つ のサービスと通信する のは現実的ではない Client Photon Web イベント送信 イベント受信 データ送信要 リクエスト イベント送信 レスポンス レスポンス待ち
  22. 22. Webhooksを使いましょう • PhotonからWebサービスを 呼び出す仕組みである Webhooksを使うべき • Photonのイベントと同期し てWebサービスが呼び出さ れるので、タイミングの心配 はなし • クライアントはPhotonとの 通信に集中でき、簡単に実 装が可能 ClientA CientB Web イベント送信 イベント送信/w Webhooks データ更新要 リクエスト イベント送信 レスポンス Photon
  23. 23. で、何に使うの…? • 基本的に、データの方向はPhoton -> Webサービ スの片方向です • 一番わかりやすいのはマルチプレイのログ取得 • 長いゲームの場合、ルーム情報の保存やプレイ ヤー情報の保存、プレイヤーの再入室のサポー トなども実現できます • Webサービスからデータを取得したい場合は WebRPCを使ってください
  24. 24. どう使うの…? • Photonのダッシュボード上で基底URLを設定 して、各イベントのPathを設定 • いろいろな情報がJSONで渡ってくるので、そ れらを見て問題がなければResultCode:0を返 せばOK! • …以上ではありますが、もう少し詳しくお話し ますw
  25. 25. Webサービス側の実装は…? • パラメータはJSONで渡されます • 戻り値もJSONで渡します • JSONが取扱えれば言語などは一切問いません • githubにサンプルもあります • 私はPHPでも作りましたが全く問題なかったです
  26. 26. まずダッシュボードの設定 • タイプはWebhooks 1.2b • BaseUrlにURLのベース 部分を指定 • Path…(Close,Create…)に は各イベント毎のPath を指定
  27. 27. ダッシュボードの設定の続き • HasErrorInfo: Webhooksで のエラー情報をクライアント 側で受け取るか否か • IsPersistent: ルームの保存 を行えるよう、メモリから ルーム情報を消す前に呼 び出すか否か • AsyncJoin: ルーム入室時の Webhooks呼び出しを非同 期にするか否か
  28. 28. 各イベント(Path)について • 下記のPathがあります – GameCreate – GameJoin – GameProperties – GameEvent – GameLeave – GameClose
  29. 29. GameCreate • ルームが作成された時に呼ばれる (Type: "Create") • 再入室におけるルーム再開の時も呼ばれる (Type: "Load") • ルーム再開の場合は、保存されているStateを戻す 必要がある – Stateを戻さない場合でCreateIfNotExistsがtrueの場合は 新規のルームが作られる
  30. 30. GameJoin • プレイヤーが既存のルームに入室・再入室し た場合に呼ばれる (Type: "Join")
  31. 31. GameProperties • ルームやプレイヤーのカスタムプロパティを 設定する時に、HttpForwardをtrueにすると送 られる – クライアントがカスタムプロパティを設定する時の パラメータで、呼ぶか呼ばないかを制御可能 • ルームの場合はType: "Room"、プレイヤーの 場合はType: "Player"となる
  32. 32. GameEvent • イベント送信時に、HttpForwardがtrueにする と送られる – クライアントがイベントを送信する際にパラメータ で呼ぶか呼ばないかを制御可能 – Type: "Event"
  33. 33. GameLeave • プレイヤーがルームから退室(切断)する時に呼 ばれる • 切断理由別にTypeが設定される – ClientDisconnect, ClientTimeoutDisconnect, ManagedDisconnect, ServerDisconnect, TimeoutDisconnect, LeaveRequest, PlayerTtlTimedOut, PeerLastTouchTimedOut, PluginRequest, PluginFailedJoin
  34. 34. GameClose • ルームの情報がPhotonのメモリから消える時 に呼ばれる • IsPersistentがtrueなら、メモリから消す前に Type: "Save"としてルームの情報(State)と共に 呼ばれる • IsPersistentがfalseなら、Type: "Close"として呼 ばれる
  35. 35. お伝えしきれなかったこと • ちょいちょい出てきてますが、ルームの情報を外 部に保存してセーブ機能を実現できます • パラメータなどはドキュメントをご参照ください • http://doc.photonengine.com/ja/realtime/curren t/reference/webhooks – 現在日本語化の準備を進めていますので、今しばら くお待ち下さい
  36. 36. WebRPCとは • Webhooksはイベントをフックして情報を送信 するもの • WebRPCはPhoton経由で任意のタイミングで Webサービスをパラメータ付きで呼び出し、 Webサービスからデータを返すことができる • WebRPCはWebサービスからデータを返せる
  37. 37. 呼び出し方 • PhotonのAPIにて – Native SDK Client::opWebRpc((Path名), (パラメータ)) – PUN PhotonNetwork.WebRpc((Path名), (パラメータ)) • Path名はWebhooksのPath名と同じ考え方 • 基本的な設定はWebhooksと共通 基底URLは同じです
  38. 38. 渡せるデータ型 • Photonが扱えてSerializeできる型はJSONに変換 されて渡されます • Webサービスからのデータは適宜変換されて戻 されます • 詳細はドキュメントを参照してください • http://doc.photonengine.com/ja/realtime/curren t/reference/webrpc
  39. 39. Webhooks最新情報 • Webhooksが1.2となってアップデートされまし た – 非同期Join – GameEvent/GamePropertiesでのState送信指定 – カスタムHTTPヘッダ • Webhooks/WebRPCがTurnbasedだけではなく Realtime, Serverでも利用可能に!
  40. 40. Webhooksまとめ • Photonの中で起こったイベントに対して呼ばれる のがWebhooks • Webサービスのデータのやり取りを行うのは WebRPC • 1.2へのアップデートやRealtimeでも利用可能に なり、可能性が広がりました • Webサービスとの連携でPhotonの利用用途は 広がります
  41. 41. Photon Server V3 vs. V4
  42. 42. Photon Server V4リリース • Photon Server V4 ようやくリリースされま した • ダッシュボードからダウ ンロードできます
  43. 43. Photon Server V3 vs. V4 • HTTP(S)サポート • クラウドの新機能も利用可能に • プラグイン対応 • カウンタリニューアル • IPv6対応 ここでお話します 第2部、第3部にて この後で!
  44. 44. クラウドの(=V4から使える)新機能 • Webhooks/WebRPC – Webサービス連携 (もう説明不要ですよね…) • カスタム認証 – 接続時のユーザー認証をWebサービス経由で行える • クラウドセーブ – ルームの情報を一時的にPhotonで保持できる • 再入室対応 – ルームに抜けたプレイヤー情報を一時的に保存でき、それを 使って再入室時に復元することができる
  45. 45. カスタム認証 • Photonへの接続時にUsername/Tokenを渡し てもらい、さらにWebサービスへ渡して認証を 行うことが可能 • 個々のプレイヤー認証だけではなく、アプリ認 証(不正クライアント対策)に使うことも可能 – Usernameは個別ID, Tokenは固定としてTokenだ けチェックするとか
  46. 46. クラウドセーブ • ルーム作成時にRoomTTLを設定することによ り、TTLの期間内はルーム情報を保持するこ とが可能 • ボードゲームで一時休止とかが簡単に実現 可能 • 認証はルーム名だけではなく退室時に渡す Tokenで行う
  47. 47. 再入室対応 • プレイヤーがルームから抜けた後、同じルー ムに入ることができる機能 • ゲームの一時中断はもとより、意図しない切 断からの再開などにも使えます • カスタム認証のUsernameがキーになる • 今のところPUNは非対応
  48. 48. V3 vs. V4まとめ • クラウドでの新機能が取り込まれより便利に • 直接のカスタマイズなしでも可能性が大きく • より安定したPhoton Serverをお試しください
  49. 49. IPv6対応
  50. 50. なぜIPv6対応が必要…? • AppleがiOS 9向けアプリにおいて、IPv6対応を 必須とする発表を行った • 当初は2015年末から、というスケジュール だったが、延期され2016年初頭に (まだ未定) • Photonも当然ながらネットワークを利用する サービスなので、対応が必須
  51. 51. IPv6に対応することとは…? • クライアントがIPv6の接続しか持たない状況 でも、問題なく動作できるようにする ということは、 • IPv4でしか使えないAPIの利用や、IPv4アドレ スを直接扱っていると問題となる
  52. 52. IPv4でしか使えないAPI • IPv4のみに対応したデータ型 – uint32_t, in_addr, sockaddr_t • IPv4のみに対応したAPI – inet_aton, gethostbyname • IPv4のみでしか使えない使い方をしたAPI – gethostbyname2(hostname, AF_INET);
  53. 53. IPv4アドレスの扱い • 接続先として、IPv4アドレス形式で持っている – "192.168.1.1" – "http://172.16.10.1/api/v1" • ネットワーク接続の確認として、 – IPv4アドレスを持っているかどうか – "0.0.0.0"に接続できるかどうか
  54. 54. 対応策 • アドレスファミリに依存しない高レイヤーのフ レームワーク、APIを使う – NSURLSession, CFNetwork • IPv4アドレスは文字列として処理する – OSがIPv6アドレスと同様によろしく処理してくれる
  55. 55. サーバー側は…? • クライアント側はIPv6対応しなきゃいけないの はわかったけど、サーバー側はどうするの? • クライアントのネットワークはキャリアだったり ユーザー任せだからいいけど、サーバー側っ て自分たちの管理だし、それもIPv6対応する のってものすごく大変では…?
  56. 56. サーバーは大丈夫! • サーバー側は"基本的 には"何もしなくていい です • キャリアがIPv6<->IPv4 ネットワーク間の変換を 行ってくれます (将来) 出典: iOS Developer Library
  57. 57. DNS64 • IPv4アドレス(=Aレコー ド)しか持たない場合で も、IPv4を内包したIPv6 アドレスを生成する • クライアントはIPv6とし て見える 出典: iOS Developer Library
  58. 58. NAT64 • DNS64で生成された IPv6アドレスへの接続 をアドレス変換してIPv4 ネットワーク上で接続 • クライアントとサーバー それぞれはGatewayと 接続する形となる 出典: iOS Developer Library
  59. 59. Photonはどうなの…? • ほぼ対応は完了しています! • Client SDKはNative SDKの対応は完了済 – 4.0.5.0でIPv6 Nativeに対応 – 4.1.0.0でBridge(NAT64+DNS64)にも対応 • .NET SDK, PUNはUnity対応待ち
  60. 60. Unityの対応状況 • Unity5において、IPv6でのSocketの挙動に問題 があり、.NET SDKとPUNは動作しない • Unity社での問題認識、バグ修正、確認までは完 了済 • いくつかの修正はまだリリースされていないので、 リリース後Exitgames社にて動作確認して、対応 SDK&PUNをリリース予定
  61. 61. サーバー側は? • 対応は完了しています! • Server SDKは4.0.28にて対応済 – RC5にてIPv6 Nativeに対応 – 4.0.28にてBridgeにも対応 • Publicクラウドサービスはすでに対応済 • Enterprise Cloudについても準備OK • そもそもなぜサーバー側の対応が必要なの…?
  62. 62. Photonのサーバーレイヤー • クラウドの場合は3段 – Name Server (NS) – Master Server (MS) – Game Server (GS) • Photon Serverの場合は 2段 – Master Server (MS) – Game Server (GS) 出典: doc.photonengine.com
  63. 63. 次のサーバーへの接続 • ルーム作成時はMSより ルームを作るべきGSの アドレスをもらう • 今までの実装ではIPv4 のアドレスをクライアン トに渡していたので、 IPv6ネットワークでは接 続できない Client MS GS ルーム作成 GSアドレス通知 "192.168.1.1" 接続不可! 接続
  64. 64. IPv6への対応法 〜Native〜 • GSはIPv4とIPv6それぞ れのアドレスを持ち、そ れをMSへ通知しておく • MSはClientとの接続の アドレスファミリを確認 して、アドレスファミリと 一致したアドレスを返す Client MS GS ルーム作成 GSアドレス通知 ”FE80:xxxx:…" AF判定 接続
  65. 65. IPv6への対応法 〜Bridge〜 • GSはIPv4と「ホスト名」を 持ち、それをMSへ通知し ておく • ClientはIPv6接続の場合 にIPv6フラグを立ててリク エストする • MSはフラグを確認して、 フラグ立っている場合は ホスト名を返す Client MS GS ルーム作成 w/IPv6 GSアドレス通知 ”gs1.aaa.com" フラグ確認 接続
  66. 66. IPv6対応まとめ • Unity対応でお待たせして恐縮ですが、見通し は立っていますので、今しばらくお待ち下さい • サーバー側は準備万端です! • Native SDKをご利用の場合は、最新SDKへの アップデートをお願いします
  67. 67. 最後に
  68. 68. まとめ • 進化したWebhooksでWebサービス連携が使 いやすく!Realtimeでも利用可能です! • Photon Server V4もリリースされました! • サーバー側のIPv6は万全!クライアント側の アップデート準備をお願いします
  69. 69. 今後の予定 • 第2部: 4/5(月)-6(火) Unite 2016 Tokyo セッション登壇します! Enterprise CloudとPluginで実現している『FINAL FANTASY GRAND MASTERS』の事例をプロデューサー& 開発者が直接お話しますのでお楽しみに! • 第3部: 5/18(水) 第2回勉強会 (After Unite) カスタマイズに対応したEnterprise Cloudと、簡単カスタ マイズのPlugin開発の詳細をお話します!
  70. 70. ヘルプセンター始めました • ナレッジベースや、コミニュティ(フォーラム)機 能のあるヘルプセンターを開設しました • コンテンツの充実化を図っていきますので、 ぜひご利用ください! • https://support.photonengine.jp/hc/ja
  71. 71. お問い合わせ • メールアドレス – developer@photonengine.jp • Webもご覧ください – http://photonengine.jp/ • ヘルプセンター – https://support.photonengine.jp/hc/ja
  72. 72. 最後に… 一緒に働ける を大募集中! (その他営業なども)
  73. 73. ありがとうございました! developer@photonengine.jp

×