Successfully reported this slideshow.
Your SlideShare is downloading. ×

Photon Webhooks & IPv6対応の最新情報

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 73 Ad

Photon Webhooks & IPv6対応の最新情報

Download to read offline

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

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

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Similar to Photon Webhooks & IPv6対応の最新情報 (20)

Advertisement

More from GMO GlobalSign Holdings K.K. (15)

Recently uploaded (20)

Advertisement

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

×