GMOアプリクラウドではじめる Photon Server v4 (2016/4/20 発表資料)

Preview:

Citation preview

GMO アプリクラウドではじめる Photon Server v4Photon 運営事務局山本 昇平 2016/04/20

自己紹介• 氏名 : 山本昇平 (Syohei Yamamoto)• 所属 : GMO クラウド株式会社• 役割 : 各種ソリューションの技術担当• 趣味はゲームと料理

– 好きなゲーム : 任天堂の某イカゲー• プレイ時間 1,000 時間以上、ウデマエは当然 S+ (最上位)• 会員数 5000 人以上のプレイヤー間交流サイトを作った

– やっぱりマルチプレイのゲームは面白い!!2

アジェンダ1. GMO アプリクラウドに Photon Server の環境を構築する2. サーバサイドアプリを構築する3. 実際に動かしてみるこのセッションを聞いて簡単なPhoton Server アプリケーションを作ろう

GMOアプリクラウドにPhoton Serverを構築する

Photon Server とは• マルチプレイを簡単に実現するためのサービス• サーバーにインストールするミドルウェア• SDK でソースコードを公開しています

– Ver.4 により Plugin 形式で開発が簡単に!– C# によるビジネスロジック

• App Store 上位タイトルでも利用5

GMO アプリクラウドとは?• ゲームやアプリに特化した IaaS 型クラウド

– 10GB のネットワーク環境を提供することで、大量トラフィックに対応– 116 種類のプランを提供し用途に応じて選択可能– 転送量の上限を設定しコストを気にせず利用可能

• 剣と魔法のログレスといった、有名タイトルでも利用されています6

Photon x GMO アプリクラウド

7

GMO アプリクラウドはPhoton 運営事務局の推奨するクラウドサーバーです

http://cloud.gmo.jp/spec/Photon/

GMO アプリクラウドのメリット

8

1 . Photon Server 全自動セットアップ【 new 】

2 . 24 時間 365 日 無料電話サポート

3 . データ転送量 利用料金に上限キャップ

コントロールパネルから Photon Server がインストールされたサーバーをわずか数クリック、数分で立ち上げることが可能です。その際、面倒なネットワーク設定や Config 設定も全自動で設定します。

GMO アプリクラウドのご契約者様のみ、 Photon 運営事務局では通常行っていない電話サポートを 24 時間 365 日体制で無料提供しています。 Photon Server のセットアップ方法を丁寧にサポートいたします。

リアルタイムやマルチ対戦などのオンラインゲームはデータ転送量が嵩みます。 GMO アプリクラウドでは、どれだけデータ転送量が発生してもご利用料金は 3 万円 / 月(モバイルゲームの場合)が上限です。

全自動セットアップSTEP

1•サーバー( Windows )の作成

STEP2

•Photon SDK のダウンロード + 設置

STEP3

•ロードバランサーのネットワーク設定

STEP4

•Photon Config の設定

STEP5

•ライセンス のダウンロード + 設置

STEP6

•Photon Application の起動

・サーバー( Windows )の作成

・ライセンス のダウンロード + 設置・ Photon Apllication の起動

■Before ■After

STEP2 ~ 4 を自動セットアップ

9

Photon Server 全自動セットアップ 実装前・後の比較

今回の手順について今回行う手順は下記 PDF に纏められています• Photon 自動構築ガイド• http://cloud.gmo.jp/spec/photon/guide/photon_ver.

4_automatic_settings_guide.pdf

簡単な操作で Photon Server セットアップ済のサーバを構築すること可能!デモ

サーバサイドアプリを構築する

サーバサイドアプリの作り方Photon Server では2つの方法があります1. Photon Server 用のカスタマイズアプリケーションを作る2. カスタマイズアプリケーション上で利用できる

Plugin を作る

サーバサイドアプリの作り方Photon Server では2つの方法があります1. Photon Server 用のカスタマイズアプリケーションを作る2. カスタマイズアプリケーション上で利用できる

Plugin を作る今回はこちら

Plugin の作り方の大まかな手順1. プログラムを作成する・ビルドする2. ビルドした DLL をフォルダに配置3. コンフィグに Plugin の設定を行う

具体的にどんなことができるの??

Plugin を使ってできる例プレイヤー情報を外部サイトに Post

プレイヤー名 : プレイヤー 1ランク : 50ウデマエ : S+ブキ : 3K スコープ

プレイヤー 1・レベル : 50・ランク : S+・ブキ : 3K スコープ外部サイト

現在のルーム情報

Plugin

入室 Post

プログラムにすると…プレイヤー 1・レベル : 50・ランク : S+・ブキ : 3K スコープ外部サイト

現在のルーム情報

PhotonNetwork.playerName = “ プレイヤー 1”PhotonNetwork.SetPlayerCustomProperties(new Hashtable() { { “level”, “50” }, { “rank”, “S+”}, { “weapon”, “3K スコープ” },}

public override void OnSetProperties(ISetPropertiesCallInfo info) { //省略 HttpClient httpClient = new HttpClient(); HttpContent content = new FormUrlEncodedContent(dict); var resopnse = await httpClient.PostAsync(url, content);

プレイヤー情報を外部サイトに Post

Plugin

入室 Post

プログラムを作成する5 class PluginFactory : IPluginFactory6 {7 public IGamePlugin Create(IPluginHost gameHost, string pluginName,

Dictionary<string, string> config, out string errorMsg)8 {9 var plugin = new TestPlugin();10 if (plugin.SetupInstance(gameHost, config, out errorMsg))11 {12 return plugin;13 }14 return null;15 }16 }

• エントリーポイントとなるファクトリクラスを作成する• TestPlugin クラスのインスタンスを作成

プログラムを作成する19 public override void OnSetProperties(ISetPropertiesCallInfo info)20 {

// 中略24 var dict = new Dictionary<string, string>();2526 dict["player_name"] = info.Nickname;2728 foreach (DictionaryEntry entry in info.Request.Properties)29 {30 dict[entry.Key.ToString()] = entry.Value.ToString();31 }

• PluginBase#OnSetProperties コールバック– カスタムプロパティをセットしたタイミング(ルーム入室と同時)によばれる– プレイヤー名とカスタムプロパティを Dictionary に変更

プログラムを作成する47 HttpClient httpClient = new HttpClient();

50 HttpContent content = new FormUrlEncodedContent(dict);5152 var resopnse = await httpClient.PostAsync(url, content);53 var result= await resopnse.Content.ReadAsStringAsync();

• 外部Web サービスに Post する– 今回は .NET に搭載されている HttpClient#PostAsync を使いました– 当たり前ですが、ビジネスロジックは通常の C# を使って書くことが可能

プログラムが完成したら、 DLL にビルドする!デモ

ビルドした DLL をフォルダに配置DLL は Plugins のフォルダの直下に配置Plugins┗[Plugin のアプリケーション名 ] ┗ bin  ┗ dll一式

ビルドした DLL をフォルダに配置例 )プラグイン名 : PluginTest%Photon%\deploy\Plugins\PluginTest\bin\PhotonHive.PluginTest.dll

コンフィグに Plugin の設定を行う今回は標準で搭載されている Loadbalancingアプリケーションに Plugin を追加してみる• Loadbalancing.dll.config に参照する DLL の情報を記入する254 <PluginSettings Enabled="true">255 <Plugins>256 <Plugin257 Name=“PluginTest"258 Version=""259 AssemblyName="PhotonHive.PluginTest.dll"260 Type="Photon.Hive.Plugin.PluginTest.PluginFactory" />261 </Plugins>262 </PluginSettings>

コンフィグに Plugin の設定を行う今回は標準で搭載されている Loadbalancingアプリケーションに Plugin を追加してみる• Loadbalancing.dll.config に参照する DLL の情報を記入する254 <PluginSettings Enabled="true">255 <Plugins>256 <Plugin257 Name=”PluginTest"258 Version=""259 AssemblyName="PhotonHive.PluginTest.dll"260 Type="Photon.Hive.Plugin.PluginTest.PluginFactory" />261 </Plugins>262 </PluginSettings>

プラグイン名 作成したDLL エントリーポイントのファクトリクラス

アプリケーションの起動ログを確認して DLL が正しく読み込まれていることを確認します2016-04-18 16:57:47,508 [1] INFO Photon.Hive.Plugin.PluginManager - Plugin Type Photon.Hive.Plugin.PluginTest.PluginFactory from assembly PhotonHive.PluginTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null was successfully created2016-04-18 16:57:47,509 [1] INFO Photon.Hive.Plugin.PluginManager - Plugin manager (version=1.0.15.11060) is setup. type=Photon.Hive.Plugin.PluginTest.PluginFactory;path=C:\Photon\deploy\Plugins\PluginTest\\bin\PhotonHive.PluginTest.dll;version=1.0.15.11060

%Photon%\deploy\log\GSGame.log から抜粋

まとめGMO アプリクラウドと Photon Server を使うことで• 簡単な操作でセットアップ済みサーバを構築可能

– 自動で Photon Server のインストールを行います– アプリクラウド側+ Photon側のネットワークの設定が不要– http://cloud.gmo.jp/spec/photon/

Plugin を使うことでサーバサイドロジックを作ることが可能• 外部サービス連携を作る場合に便利• DLL 作成後のデプロイ作業は配置と設定だけ完了

最後に例のプログラムは下記 URL にて公開しています。• Photon Server アプリケーション• https://github.com/syyama/PhotonPluginTest

Plugin の詳細については下記の勉強会にて解説します!• 1 時間でわかる Plugin 開発と Enterprise Cloud の詳解• 5/18 GMO Yours (ココ)で開催します!• https://atnd.org/events/76303

お知らせ一緒に盛り上げてくれる仲間を大募集中!

( エンジニア、営業などなど )27

ありがとうございました!developer@photonengine.jp