Upload
satoshi-yamafuji
View
6.446
Download
0
Embed Size (px)
DESCRIPTION
2014/9/2 CEDEC2014にて講演させて頂いた 「剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術」 で使用した資料です。
Citation preview
剣と魔法のログレス いにしえの女神
株式会社 Aiming 神部 公輔 山藤 智之 西村 哲弥
~スマホ時代の MMORPG を支える技術
株式会社 Aiming から来ました神部 公輔クライアントエンジニア。元家庭用ゲーム開発者、2006年からオンラインゲームの開発に従事。
山藤 智之リードエンジニア兼サーバエンジニア。元WEB系R&D、2007年からオンラインゲームの開発に従事。
西村 哲弥クライアントエンジニア。元家庭用ゲーム開発者、2004年からオンラインゲームの開発に従事。
セッションの内容剣と魔法のログレスの紹介
開発環境について
ゲームクライアントについて
リアルタイム通信について
サーバについて
チャットシステムについて
リリースまでに起きた問題と、残された課題について
剣と魔法のログレスって?
「剣と魔法のログレス いにしえの女神」は 株式会社マーベラス様との 共同事業タイトルです。
「剣と魔法のログレス」という Flashで作成されたブラウザ型のMMORPGで
「剣と魔法のログレス いにしえの女神」の前作に あたるタイトルがあります。
スマホで本格MMORPGを実現
ランキング推移
App StoreGoogle Play
ランキング推移
App Store
剣と魔法のログレス いにしえの女神 とは?
600種類を超える 多彩な装備
大勢の仲間と共に 壮大なストーリーを堪能
剣と魔法のログレスとは?
大勢の仲間と 白熱の
リアルタイム通信戦闘
強力な コミュニティ機能を実装
累計300万ダウンロード突破
(2014年8月6日時点)
大迫力のリアルタイム通信バトル
お手軽な !シンボルエンカウント方式
簡単タップ操作ながら 大人数での戦略性の高い リアルタイム通信バトルを実現
仲間(他プレイヤー)達との連携が !勝負を左右する
充実のコミュニケーション機能楽しさ広がるプレイヤー同士のコミュニケーション
エモーション機能
グループチャット
かわいいポーズで自分をアピール
気の合う仲間と自由にグループ作成
ログレスを支える 開発環境
クライアント サーバ 内製ツールなど開発補助に利用
プログラム言語 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
開発環境
クライアント サーバ 内製ツールなど開発補助に利用
プログラム言語 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
ゲームクライアントは 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
サーバは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
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
開発のフローなど
クライアント サーバ 内製ツールなど開発補助に利用
プログラム言語 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
バージョン管理
ログレスを支える ゲームクライアント
プロジェクト要件スマートフォンで遊べるオンラインゲームをリリースしたい
リリース時期はなるべく早く!
開発開始は2012年冬
ブラウザ版ログレスを移植するのが良さそう
サーバは使いまわせても、クライアントは完全新規
新規開発・・・ とういことで
クライアントに求められた要件
TCP通信が可能である
iOS, Androidをターゲットとしたクロスプラットフォーム開発が容易である
クライアントに求められた要件
ブラウザ版ログレス用に作成された、豊富なFlashのアニメーションデータを再利用したい
大量の2Dオブジェクトが表示可能である
その上で快適なプレイを保証する必要がある
Cocos2d-xのメリット
クロスプラットフォーム開発のサポート
2Dゲームフレームワーク
ソースが公開されている
Cocos2d-xのデメリット
Objective-CベースでC++に移植されているため C++の文化と違う部分でコーディングが面倒
UIのサポートが弱い
Cocos2d-xを使用した MMORPGクライアントについて
Cocos2d-xの参照カウント方式のオブジェクトをC++のスマートポインタで扱えるようにした
std::shared_ptr
deleterをオーバーライドすることで参照カウントを無視してdeleteすることを防ぐことでCCObjectをshared_ptrで扱うことが出来る。
std::shared_ptrthisをshared_ptrとして扱えることで非同期処理の実装が非常に簡略化出来るようになった。
Cocos2d-xを使用した MMORPGクライアントについてパッチシステムの作成
AssetManagerは差分更新をサポートしていない
UIコンポーネントを追加
Flashアニメーションプレーヤの作成
内製のネットワークライブラリの組み込み
リアルタイム通信
ログレスを支える
MMORPGに必要不可欠な リアルタイム通信の要素
TCP通信
コネクション指向のプロトコルであるTCPを使用
RPC
Remote Procedure Call
TCP接続によりRPCを用いて非同期的に送受信を行う
内製ネットワークライブラリについて
TCP通信のサポート
ブラウザ版ログレスでも同じものを使用
RPCのサポート
IDLからRPC定義を生成するツールを内包
RPCスタブコードの自動生成 アイテム情報の通信
IDL(xml)の記述
生成されたRPC受信側のソース
RPCスタブコードの自動生成 アイテム情報の通信生成されたRPC送信側のソースJSONでシリアライズして送信する(実際はバイナリでシリアライズ)
ゲームアセットと ゲームデータとの違いゲームアセット
クライアントが使用
音楽や画像、アニメーションなど
ゲームデータ
サーバが使用(必要に応じてクライアントに送信する)
AIや レベルテーブル、アイテムデータなど
ゲームロジックを処理するのはどちらか?
MMO型のゲームではゲームのルールはすべてサーバーに実装される
クライアントにはほぼゲームロジック実装されていない
処理するのは、クライアントで完結するものかクラアントで分散処理可能なものくらい
ログレスを支える サーバ構成
Account
Database
back-end
Zone
Game
WebAPI
Client
ユーザーアカウントの管理
ゲームデータの保存
フロントエンド間のデータ同期
ゲームサーバ間のデータ転送
ゲームサーバ
ウェブAPIサーバ
ゲームクライアント
サーバー構成の概念図1ワールドの構成と各ノードの説明
Game
Account !
back-end
ZoneWebAPI
Client
Database
Game
Client Cl ient Cl ient
サーバー構成の概念図データの流れ
Game
Account !
back-end
ZoneWebAPI
Client
Database
Game
Client Cl ient Cl ient
サーバー構成
GAME WEB
ACCOUNT
PARTY
CHAT
STORAGE
MAP QUEST
ZONE
MASTER
MASTER
SLAVE
SLAVE
GAME GAME GAME WEB WEB WEB
ZONE
CHAT
STORAGE
MASTER
MASTER
MASTER
SLAVE
SLAVE
SLAVE
GAME WEB
ACCOUNT
PARTY
CHAT
STORAGE
MAP QUEST
ZONE
MASTER
MASTER
SLAVE
SLAVE
GAME GAME GAME WEB WEB WEB
ZONE
CHAT
STORAGE
MASTER
MASTER
MASTER
SLAVE
SLAVE
SLAVE
サーバー構成フロントエンド
GAME WEB
ACCOUNT
PARTY
CHAT
STORAGE
MAP QUEST
ZONE
MASTER
MASTER
SLAVE
SLAVE
GAME GAME GAME WEB WEB WEB
ZONE
CHAT
STORAGE
MASTER
MASTER
MASTER
SLAVE
SLAVE
SLAVE
サーバー構成バックエンド
GAME WEB
ACCOUNT
PARTY
CHAT
STORAGE
MAP QUEST
ZONE
MASTER
MASTER
SLAVE
SLAVE
GAME GAME GAME WEB WEB WEB
ZONE
CHAT
STORAGE
MASTER
MASTER
MASTER
SLAVE
SLAVE
SLAVE
サーバー構成データーベース
GAME WEB
ACCOUNT
PARTY
CHAT
STORAGE
MAP QUEST
ZONE
MASTER
MASTER
SLAVE
SLAVE
GAME GAME GAME WEB WEB WEB
ZONE
CHAT
STORAGE
MASTER
MASTER
MASTER
SLAVE
SLAVE
SLAVE
サーバー構成冗長化している箇所
GAME WEB
ACCOUNT
PARTY
CHAT
STORAGE
MAP QUEST
ZONE
MASTER
MASTER
SLAVE
SLAVE
GAME GAME GAME WEB WEB WEB
ZONE
CHAT
STORAGE
MASTER
MASTER
MASTER
SLAVE
SLAVE
SLAVE
サーバー構成冗長化していない箇所
冗長化が可能な限り行っている
やらない(やれない)ところは諦めている
データベースは垂直分割
機能毎にDBを分離
水平分割(ユーザー単位分割)は行っていない
サーバー構成
ログレスを支える チャットシステム
チャットシステムの 要件
可能な限り過去までさかのぼってログを見れる
自分がオフライン中の間に、他プレイヤーが発言したメッセージもログで見れる
グループチャットができる
チャットシステムの 要件への対応可能な限り過去までさかのぼってログを見れる
→DBに一ヶ月分程度のログを保持
自分がオフライン中の間に、他プレイヤーが発言したメッセージもログで見れる
→DBに保存されたいるのでクライアントからWebAPI経由で取得する
チャットに関するクライアントとサーバの関連図
チャットに関するクライアントとサーバの関連図こんな感じで、発言したキャラクターから吹き出しが出る
チャットに関するクライアントとサーバの関連図こんな感じで、発言したキャラクターから吹き出しが出る この間はSocket通信
チャットに関するクライアントとサーバの関連図こんな感じで、発言したキャラクターから吹き出しが出る
この部分にチャットログが残る
この間はSocket通信
チャットに関するクライアントとサーバの関連図こんな感じで、発言したキャラクターから吹き出しが出る
この部分にチャットログが残る
この間はSocket通信
こっちはHTTP通信
チャットのデータフロー
チャットのデータフロー
発言発言
吹き出し表示
チャットのデータフロー
発言
DBに書く
発言
吹き出し表示
吹き出し表示
吹き出し表示
吹き出し表示
吹き出し表示
チャットのデータフロー
発言
DBに書く
発言
吹き出し表示ログ取得
吹き出し表示
吹き出し表示
吹き出し表示
吹き出し表示
チャットのデータフロー
発言
DBに書く
発言
吹き出し表示ログ取得
ログ読み込み
吹き出し表示
ログ表示
吹き出し表示
吹き出し表示
吹き出し表示
直面した問題と その解決、今後の課題
直面した問題と、その解決3G回線でのゲームプレイ
具体的な対策というのはないが、特に大きな問題なく動いた
回線切断についてはブラウザ版ログレスのページリロード対策のノウハウがほぼそのまま使えた
サーバは資産である過去の実装をそのまま使いまわす必要があったが設計が合わない部分でサーバに高負荷問題が起きた
バックエンドをスケールアウトできるように修正して対応
今後の課題
クライアントのパフォーマンス・チューニング
マップ描画、アバター描画最適化
電池消費量の改善
クライアントの安定化
強制終了の改善
今後の課題
通信量の削減
キャリアの通信制限にかかっても遊べるのを目指したい
サーバの1ワールド毎の同時接続数の許容量を増やしたい
セッションの内容剣と魔法のログレスの紹介
開発環境について
ゲームクライアントについて
リアルタイム通信について
サーバについて
チャットシステムについて
リリースまでに起きた問題と、残された課題について
ご静聴ありがとうございました!!