Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

2014/9/2 CEDEC2014にて講演させて頂いた
「剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術」
で使用した資料です。

  • Loggen Sie sich ein, um Kommentare anzuzeigen.

剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

  1. 1. 剣と魔法のログレス いにしえの女神 ~スマホ時代の MMORPG を支える技術 株式会社 Aiming 神部 公輔 山藤 智之 西村 哲弥
  2. 2. 株式会社 Aiming から来ました 神部 公輔 クライアントエンジニア。元家庭用ゲーム開発者、2006年からオン ラインゲームの開発に従事。 山藤 智之 リードエンジニア兼サーバエンジニア。元WEB系R&D、2007年から オンラインゲームの開発に従事。 西村 哲弥 クライアントエンジニア。元家庭用ゲーム開発者、2004年からオン ラインゲームの開発に従事。
  3. 3. セッションの内容 剣と魔法のログレスの紹介 開発環境について ゲームクライアントについて リアルタイム通信について サーバについて チャットシステムについて リリースまでに起きた問題と、残された課題について
  4. 4. 剣と魔法のログレス って?
  5. 5. 「剣と魔法のログレス いにしえの女神」は 株式会社マーベラス様との 共同事業タイトルです。
  6. 6. 「剣と魔法のログレス」という Flashで作成されたブラウザ型のMMORPGで 「剣と魔法のログレス いにしえの女神」の前作に あたるタイトルがあります。
  7. 7. スマホで本格MMORPGを実現
  8. 8. ランキング推移 AGpopo gSlteo Prelay
  9. 9. ランキング推移 App Store
  10. 10. 剣と魔法のログレス いにしえの女神 とは? 600種類を超える 多彩な装備 大勢の仲間と共に 壮大なストーリーを堪能 剣と魔法のログレスとは? 大勢の仲間と 白熱の リアルタイム通信戦闘 強力な コミュニティ機能を実装 累計300万ダウンロード 突破 (2014年8月6日時点)
  11. 11. 大迫力のリアルタイム通信バトル お手軽な! シンボルエンカウント方式 簡単タップ操作ながら 大人数での戦略性の高い リアルタイム通信バトルを実現 仲間(他プレイヤー)達との連携が! 勝負を左右する
  12. 12. 充実のコミュニケーション機能 楽しさ広がるプレイヤー同士のコミュニケーション エモーション機能 グループチャット かわいいポーズで自分をアピール 気の合う仲間と自由にグループ作成
  13. 13. ログレスを支える 開発環境
  14. 14. 開発環境 クライアントサーバ内製ツールなど 開発補助に利用 プログラム言語C++11(VC++, GCC, Clang), Lua C++11(GCC), Python Python, C#, Perl, Ruby, Shell script ライブラリ ームワーク Cocos2d-x(2.x), Boost Boost, Flask, Google Test Cocos2d-x, Protocol Buffers, Adobe AIR, ツール スなど Visual Studio 2013, Eclipse, NDK, Xcode VMware, MySQL, Apache, mod_wsgi Jenkins, Gerrit, Cppcheck, Redmine バージョン管理Git 外部サービスGoogle Drive, Trello
  15. 15. ゲームクライアントは WindowsでVisual Studioを利用して開発 クライアントサーバ内製ツールなど 開発補助に利用 プログラム言語C++11(VC++, GCC, Clang), Lua C++11(GCC), Python Python, C#, Perl, Ruby, Shell script ライブラリ ームワーク Cocos2d-x(2.x), Boost Boost, Flask, Google Test Cocos2d-x, Protocol Buffers, Adobe AIR, ツール スなど Visual Studio 2013, Eclipse, NDK, Xcode VMware, MySQL, Apache, mod_wsgi Jenkins, Gerrit, Cppcheck, Redmine バージョン管理Git 外部サービスGoogle Drive, Trello
  16. 16. サーバはVMwareなど仮想マシンで開発 クライアントサーバ内製ツールなど 開発補助に利用 プログラム言語C++11(VC++, GCC, Clang), Lua C++11(GCC), Python Python, C#, Perl, Ruby, Shell script ライブラリ ームワーク Cocos2d-x(2.x), Boost Boost, Flask, Google Test Cocos2d-x, Protocol Buffers, Adobe AIR, ツール スなど Visual Studio 2013, Eclipse, NDK, Xcode VMware, MySQL, Apache, mod_wsgi Jenkins, Gerrit, Cppcheck, Redmine バージョン管理Git 外部サービスGoogle Drive, Trello
  17. 17. WebサーバにはPythonを利用 クライアントサーバ内製ツールなど 開発補助に利用 プログラム言語C++11(VC++, GCC, Clang), Lua C++11(GCC), Python Python, C#, Perl, Ruby, Shell script ライブラリ ームワーク Cocos2d-x(2.x), Boost Boost, Flask, Google Test Cocos2d-x, Protocol Buffers, Adobe AIR, ツール スなど Visual Studio 2013, Eclipse, NDK, Xcode VMware, MySQL, Apache, mod_wsgi Jenkins, Gerrit, Cppcheck, Redmine バージョン管理Git 外部サービスGoogle Drive, Trello
  18. 18. 開発のフローなど クライアントサーバ内製ツールなど 開発補助に利用 プログラム言語C++11(VC++, GCC, Clang), Lua C++11(GCC), Python Python, C#, Perl, Ruby, Shell script ライブラリ ームワーク Cocos2d-x(2.x), Boost Boost, Flask, Google Test Cocos2d-x, Protocol Buffers, Adobe AIR, ツール スなど Visual Studio 2013, Eclipse, NDK, Xcode VMware, MySQL, Apache, mod_wsgi Jenkins, Gerrit, cppcheck, Redmine バージョン管理Git 外部サービスGoogle Drive, Trello
  19. 19. バージョン管理 クライアントサーバ内製ツールなど 開発補助に利用 プログラム言語C++11(VC++, GCC, Clang), Lua C++11(GCC), Python Python, C#, Perl, Ruby, Shell script ライブラリ ームワーク Cocos2d-x(2.x), Boost, Protocol Buffers Boost, Flask, Google Test Cocos2d-x, Protocol Buffers, Adobe AIR, ツール スなど Visual Studio 2013, Eclipse, NDK, Xcode VMware, MySQL, Apache, mod_wsgi Jenkins, Gerrit, cppcheck, Redmine バージョン管理Git 外部サービスGoogle Drive, Trello
  20. 20. ログレスを支える ゲームクライアント
  21. 21. プロジェクト要件 スマートフォンで遊べるオンラインゲームを リリースしたい リリース時期はなるべく早く! 開発開始は2012年冬 ブラウザ版ログレスを移植するのが良さそう サーバは使いまわせても、クライアントは完全新規
  22. 22. 新規開発・・・ とういことで
  23. 23. クライアントに求められた 要件 TCP通信が可能である iOS, Androidをターゲットとしたクロスプラット フォーム開発が容易である
  24. 24. クライアントに求められた 要件 ブラウザ版ログレス用に作成された、豊富なFlash のアニメーションデータを再利用したい 大量の2Dオブジェクトが表示可能である その上で快適なプレイを保証する必要がある
  25. 25. Cocos2d-xのメリット クロスプラットフォーム開発のサポート 2Dゲームフレームワーク ソースが公開されている
  26. 26. Cocos2d-xのデメリット Objective-CベースでC++に移植されているため C++の文化と違う部分でコーディングが面倒 UIのサポートが弱い
  27. 27. Cocos2d-xを使用した MMORPGクライアントについて Cocos2d-xの参照カウント方式のオブジェクトを C++のスマートポインタで扱えるようにした
  28. 28. std::shared_ptr deleterをオーバーライドすることで参照カウントを 無視してdeleteすることを防ぐことでCCObjectを shared_ptrで扱うことが出来る。
  29. 29. std::shared_ptr thisをshared_ptrとして扱えることで非同期処理の 実装が非常に簡略化出来るようになった。
  30. 30. Cocos2d-xを使用した MMORPGクライアントについて パッチシステムの作成 AssetManagerは差分更新をサポートしていない UIコンポーネントを追加 Flashアニメーションプレーヤの作成 内製のネットワークライブラリの組み込み
  31. 31. ログレスを支える リアルタイム通信
  32. 32. MMORPGに必要不可欠な リアルタイム通信の要素 TCP通信 コネクション指向のプロトコルであるTCPを使用 RPC Remote Procedure Call TCP接続によりRPCを用いて非同期的に送受信を 行う
  33. 33. 内製ネットワークライブラ リについて TCP通信のサポート ブラウザ版ログレスでも同じものを使用 RPCのサポート IDLからRPC定義を生成するツールを内包
  34. 34. RPCスタブコードの自動生成 アイテム情報の通信 IDL(xml)の記述 生成されたRPC受信側のソース
  35. 35. RPCスタブコードの自動生成 アイテム情報の通信 生成されたRPC送信側のソース JSONでシリアライズして送信する(実際はバイナリでシリアライズ)
  36. 36. ゲームアセットと ゲームデータとの違い ゲームアセット クライアントが使用 音楽や画像、アニメーションなど ゲームデータ サーバが使用(必要に応じてクライアントに送信する) AIや レベルテーブル、アイテムデータなど
  37. 37. ゲームロジックを処理す るのはどちらか? MMO型のゲームではゲームのルールはすべてサー バーに実装される クライアントにはほぼゲームロジック実装されて いない 処理するのは、クライアントで完結するものか クラアントで分散処理可能なものくらい
  38. 38. ログレスを支える サーバ構成
  39. 39. Account Database back-end Zone Game WebAPI Client ユーザーアカウントの管理 ゲームデータの保存 フロントエンド間のデータ同期 ゲームサーバ間のデータ転送 ゲームサーバ ウェブAPIサーバ ゲームクライアント
  40. 40. サーバー構成の概念図 1ワールドの構成と各ノードの説明 Game Account! back-end Zone WebAPI Client Database Game Client Client Client
  41. 41. サーバー構成の概念図 データの流れ Game Account! back-end Zone WebAPI Client Database Game Client Client Client
  42. 42. サーバー構成 GAME GAME GAME WEB WEB WEB GAME WEB PARTY ZONE ACCOUNT CHAT STORAGE MAP QUEST MASTER SLAVE MASTER SLAVE ZONE CHAT STORAGE MASTER MASTER MASTER SLAVE SLAVE SLAVE
  43. 43. サーバー構成 フロントエンド GAME GAME GAME WEB WEB WEB GAME WEB PARTY ZONE ACCOUNT CHAT STORAGE MAP QUEST MASTER SLAVE MASTER SLAVE ZONE CHAT STORAGE MASTER MASTER MASTER SLAVE SLAVE SLAVE
  44. 44. サーバー構成 バックエンド GAME GAME GAME WEB WEB WEB GAME WEB PARTY ZONE ACCOUNT CHAT STORAGE MAP QUEST MASTER SLAVE MASTER SLAVE ZONE CHAT STORAGE MASTER MASTER MASTER SLAVE SLAVE SLAVE
  45. 45. サーバー構成 データーベース GAME GAME GAME WEB WEB WEB GAME WEB PARTY ZONE ACCOUNT CHAT STORAGE MAP QUEST MASTER SLAVE MASTER SLAVE ZONE CHAT STORAGE MASTER MASTER MASTER SLAVE SLAVE SLAVE
  46. 46. サーバー構成 冗長化している箇所 GAME GAME GAME WEB WEB WEB GAME WEB PARTY ZONE ACCOUNT CHAT STORAGE MAP QUEST MASTER SLAVE MASTER SLAVE ZONE CHAT STORAGE MASTER MASTER MASTER SLAVE SLAVE SLAVE
  47. 47. サーバー構成 冗長化していない箇所 GAME GAME GAME WEB WEB WEB GAME WEB PARTY ZONE ACCOUNT CHAT STORAGE MAP QUEST MASTER SLAVE MASTER SLAVE ZONE CHAT STORAGE MASTER MASTER MASTER SLAVE SLAVE SLAVE
  48. 48. サーバー構成 冗長化が可能な限り行っている やらない(やれない)ところは諦めている データベースは垂直分割 機能毎にDBを分離 水平分割(ユーザー単位分割)は行っていない
  49. 49. ログレスを支える チャットシステム
  50. 50. チャットシステムの 要件 可能な限り過去までさかのぼってログを見れる 自分がオフライン中の間に、他プレイヤーが発言 したメッセージもログで見れる グループチャットができる
  51. 51. チャットシステムの 要件への対応 可能な限り過去までさかのぼってログを見れる →DBに一ヶ月分程度のログを保持 自分がオフライン中の間に、他プレイヤーが発言 したメッセージもログで見れる →DBに保存されたいるのでクライアントから WebAPI経由で取得する
  52. 52. チャットに関するクライア ントとサーバの関連図
  53. 53. チャットに関するクライア ントとサーバの関連図 こんな感じで、発言したキャ ラクターから吹き出しが出る
  54. 54. チャットに関するクライア ントとサーバの関連図 こんな感じで、発言したキャ ラクターから吹き出しが出るこの間はSocket通信
  55. 55. チャットに関するクライア ントとサーバの関連図 こんな感じで、発言したキャ ラクターから吹き出しが出る この間はSocket通信 この部分にチャットログが残る
  56. 56. チャットに関するクライア ントとサーバの関連図 こんな感じで、発言したキャ ラクターから吹き出しが出る この間はSocket通信 こっちはHTTP通信 この部分にチャットログが残る
  57. 57. チャットのデータフロー
  58. 58. チャットのデータフロー 発言 発言 吹き出し表示
  59. 59. チャットのデータフロー 発言 DBに書く 発言 吹き出し表示 吹き出し表示 吹き出し表示 吹き出し表示 吹き出し表示
  60. 60. チャットのデータフロー 発言 DBに書く 発言 吹き出し表示 ログ取得吹き出し表示 吹き出し表示 吹き出し表示 吹き出し表示
  61. 61. チャットのデータフロー 発言 DBに書く 発言 ログ取得吹き出し表示 ログ読み込み 吹き出し表示 ログ表示 吹き出し表示 吹き出し表示 吹き出し表示
  62. 62. 直面した問題と その解決、今後の課題
  63. 63. 直面した問題と、その解決 3G回線でのゲームプレイ 具体的な対策というのはないが、特に大きな問題なく動い た 回線切断についてはブラウザ版ログレスのページリロード 対策のノウハウがほぼそのまま使えた サーバは資産である過去の実装をそのまま使いまわす必要があっ たが設計が合わない部分でサーバに高負荷問題が起きた バックエンドをスケールアウトできるように修正して対応
  64. 64. 今後の課題 クライアントのパフォーマンス・チューニング マップ描画、アバター描画最適化 電池消費量の改善 クライアントの安定化 強制終了の改善
  65. 65. 今後の課題 通信量の削減 キャリアの通信制限にかかっても遊べるのを 目指したい サーバの1ワールド毎の同時接続数の許容量を増や したい
  66. 66. セッションの内容 剣と魔法のログレスの紹介 開発環境について ゲームクライアントについて リアルタイム通信について サーバについて チャットシステムについて リリースまでに起きた問題と、残された課題について
  67. 67. ご静聴ありがとうございました!!

×