SGE(Smartphone Games & Entertainment)のグレンジ所属の塚原と袴田です。
2016/04/20に開催されたリアルタイム通信ゲーム勉強会で発表してきたので報告をします。
グレンジについて
CAのゲーム事業部(SGE)の中の1つです。
の2つを開発・運営しています。
勉強会ではポコロンダンジョンズの共闘(多人数の協力プレイ)の仕組みについて発表しました。
ポコロンダンジョンズについて
2014年夏にリリースされた「なぞるパズルRPG」です。
当初は1人プレイのみでしたが、2015年春に最大4人の協力プレイ「共闘」が実装されました。
共闘はSocket.IOを使ったリアルタイム通信システムによって動作していて、勉強会ではサーバサイド/クライアントサイドの仕組みを「そこまで見せるのか」というほど公開しています。
サーバサイド編(発表者:塚原)
主に、利用技術、サーバ構成、やりとりしているデータを例にどのようにマルチプレイを実現させているのかを説明しています。
サーバサイドは非リアルタイム通信部分をPHP、リアルタイム通信部分をNode.js(socket.io)で構成されているので、その棲み分けの話もしています。
ちなみに、発表の数日後に仕組みを改修し、課題としていたNodeプロセスのCluster化を行いました。(なので、発表資料の説明の一部は古いです)
1コア1ワーカプロセスでサーバを並べていたのを4コア4ワーカプロセスにしてサーバー台数を削減しています。
発表資料
クライアントサイド編(発表者:袴田)
こちらは利用技術、構成、発生した問題と解決方法の話を織り交ぜながら、どのように端末間での同期を実現しているのか処理の流れを追いながら説明しています。
クライアントサイドはcocos-2dxとsocket.ioでリアルタイム通信をしているのですが、ソケットが切断されてしまった際の復旧や、端末間で盤面にズレが生じた際の仕組み、通信データ量を抑えるためにどうしているのか、乱数を各端末で同期する仕組みの話とポコロンダンジョンズのリアルタイム通信のキモになっている部分の多くを公開しています。
発表資料
さいごに
今回はポコロンダンジョンズで行っているリアルタイム通信について公開しました。
自分達なりに試行錯誤してきた結果ですが、別の方法はあると考えています。
何かご意見等あれば是非お願いします。