Submit Search
Upload
elixirを使ったゲームサーバ
•
31 likes
•
15,967 views
Hidetaka Kojo
Follow
XFLAG™スタジオ engineer meet up 2016 の発表資料
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 22
Download now
Download to read offline
Recommended
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
torisoup
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
MagicOnion入門
MagicOnion入門
torisoup
Redmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみた
Kohei Nakamura
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
YutoNishine
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
Game Tools & Middleware Forum
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
モノビット エンジン
Recommended
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
torisoup
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
MagicOnion入門
MagicOnion入門
torisoup
Redmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみた
Kohei Nakamura
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
YutoNishine
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
Game Tools & Middleware Forum
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
モノビット エンジン
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
通信対戦ゲームを作った話
通信対戦ゲームを作った話
mipsparc
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
sairoutine
目grep入門 +解説
目grep入門 +解説
murachue
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
DeNAのネイティブアプリにおけるサーバ開発の現在と未来
DeNAのネイティブアプリにおけるサーバ開発の現在と未来
DeNA
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
Yugo Shimizu
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
DeNA
究極のゲーム用通信プロトコル “WebRTC”
究極のゲーム用通信プロトコル “WebRTC”
Ryosuke Otsuya
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
Naoya Kishimoto
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
GMO GlobalSign Holdings K.K.
自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方
光晶 上原
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
DeNA
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
DeNA
なぜなにFProperty - 対応方法と改善点 -
なぜなにFProperty - 対応方法と改善点 -
エピック・ゲームズ・ジャパン Epic Games Japan
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
Terraform始めました
Terraform始めました
w1mvy pine
Windsor castle
Windsor castle
Marisolaguilar
More Related Content
What's hot
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
通信対戦ゲームを作った話
通信対戦ゲームを作った話
mipsparc
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
sairoutine
目grep入門 +解説
目grep入門 +解説
murachue
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
DeNAのネイティブアプリにおけるサーバ開発の現在と未来
DeNAのネイティブアプリにおけるサーバ開発の現在と未来
DeNA
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
Yugo Shimizu
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
DeNA
究極のゲーム用通信プロトコル “WebRTC”
究極のゲーム用通信プロトコル “WebRTC”
Ryosuke Otsuya
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
Naoya Kishimoto
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
GMO GlobalSign Holdings K.K.
自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方
光晶 上原
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
DeNA
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
DeNA
なぜなにFProperty - 対応方法と改善点 -
なぜなにFProperty - 対応方法と改善点 -
エピック・ゲームズ・ジャパン Epic Games Japan
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
What's hot
(20)
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
通信対戦ゲームを作った話
通信対戦ゲームを作った話
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
目grep入門 +解説
目grep入門 +解説
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
DeNAのネイティブアプリにおけるサーバ開発の現在と未来
DeNAのネイティブアプリにおけるサーバ開発の現在と未来
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
究極のゲーム用通信プロトコル “WebRTC”
究極のゲーム用通信プロトコル “WebRTC”
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
なぜなにFProperty - 対応方法と改善点 -
なぜなにFProperty - 対応方法と改善点 -
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Viewers also liked
Terraform始めました
Terraform始めました
w1mvy pine
Windsor castle
Windsor castle
Marisolaguilar
2017冬の開発合宿vrオンラインゲーム
2017冬の開発合宿vrオンラインゲーム
Syo Igarashi
スマートフォンゲームのチート事情
スマートフォンゲームのチート事情
直生 亀山
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
Takuya Ueda
私なりのGo言語のご紹介
私なりのGo言語のご紹介
Ryuji Iwata
Go言語オーバービュー201507
Go言語オーバービュー201507
エンジニア勉強会 エスキュービズム
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
Akihiro Kuwano
【初心者向け】Go言語勉強会資料
【初心者向け】Go言語勉強会資料
Yuji Otani
Viewers also liked
(9)
Terraform始めました
Terraform始めました
Windsor castle
Windsor castle
2017冬の開発合宿vrオンラインゲーム
2017冬の開発合宿vrオンラインゲーム
スマートフォンゲームのチート事情
スマートフォンゲームのチート事情
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
私なりのGo言語のご紹介
私なりのGo言語のご紹介
Go言語オーバービュー201507
Go言語オーバービュー201507
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
【初心者向け】Go言語勉強会資料
【初心者向け】Go言語勉強会資料
Similar to elixirを使ったゲームサーバ
シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議
Shinra_Technologies
クリエイター魂を刺激する!シンラが提案する「ゲームの超進化」ロードマップ
クリエイター魂を刺激する!シンラが提案する「ゲームの超進化」ロードマップ
Shinra_Technologies
FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方
dena_study
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
Yasutomo Uemori
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
Daisuke Masubuchi
TDUCTFの実行基盤
TDUCTFの実行基盤
Youta Egusa
さくらのクラウドを使ってみよう
さくらのクラウドを使ってみよう
法林浩之
サイバーエージェントのゲーム事業のインフラからみたゲーム開発スタイルの変遷
サイバーエージェントのゲーム事業のインフラからみたゲーム開発スタイルの変遷
Suguru Shirai
ある工場の情シス
ある工場の情シス
Kohei Nakamura
Elasticsearch for Hackadoll
Elasticsearch for Hackadoll
mosa siru
Infrastructure as code ~ ツールスタック / ヌーラボの事例 ~
Infrastructure as code ~ ツールスタック / ヌーラボの事例 ~
ikikko
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
UnityTechnologiesJapan002
Play jjug2012spring
Play jjug2012spring
Takafumi Ikeda
セガサターンマシン語プログラミングの紹介
セガサターンマシン語プログラミングの紹介
Yuma Ohgami
【Unite Tokyo 2019】Unity + PlayFab ではじめる新しいゲーム運用 ~LiveOpsの始め方~
【Unite Tokyo 2019】Unity + PlayFab ではじめる新しいゲーム運用 ~LiveOpsの始め方~
UnityTechnologiesJapan002
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
gree_tech
Type scriptmemo
Type scriptmemo
ytanno
Javaによるゲーム開発パッケージ化への取り組みと開発ノウハウ
Javaによるゲーム開発パッケージ化への取り組みと開発ノウハウ
Genki Yamada
Azureの上におとりを置いて、世界中から攻撃される様子を観察した話
Azureの上におとりを置いて、世界中から攻撃される様子を観察した話
Ryuki Yoshimatsu
MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例
MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例
Satoshi Yamafuji
Similar to elixirを使ったゲームサーバ
(20)
シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議
クリエイター魂を刺激する!シンラが提案する「ゲームの超進化」ロードマップ
クリエイター魂を刺激する!シンラが提案する「ゲームの超進化」ロードマップ
FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
TDUCTFの実行基盤
TDUCTFの実行基盤
さくらのクラウドを使ってみよう
さくらのクラウドを使ってみよう
サイバーエージェントのゲーム事業のインフラからみたゲーム開発スタイルの変遷
サイバーエージェントのゲーム事業のインフラからみたゲーム開発スタイルの変遷
ある工場の情シス
ある工場の情シス
Elasticsearch for Hackadoll
Elasticsearch for Hackadoll
Infrastructure as code ~ ツールスタック / ヌーラボの事例 ~
Infrastructure as code ~ ツールスタック / ヌーラボの事例 ~
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Play jjug2012spring
Play jjug2012spring
セガサターンマシン語プログラミングの紹介
セガサターンマシン語プログラミングの紹介
【Unite Tokyo 2019】Unity + PlayFab ではじめる新しいゲーム運用 ~LiveOpsの始め方~
【Unite Tokyo 2019】Unity + PlayFab ではじめる新しいゲーム運用 ~LiveOpsの始め方~
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
Type scriptmemo
Type scriptmemo
Javaによるゲーム開発パッケージ化への取り組みと開発ノウハウ
Javaによるゲーム開発パッケージ化への取り組みと開発ノウハウ
Azureの上におとりを置いて、世界中から攻撃される様子を観察した話
Azureの上におとりを置いて、世界中から攻撃される様子を観察した話
MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例
MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例
elixirを使ったゲームサーバ
1.
elixirを使ったゲームサーバ Hidetaka Kojo XFLAG™スタジオ /
mixi, Inc.
2.
自己紹介 • 名前: 古城秀隆 • github:
HidetakaKojo • 所属: エックスフラグスタジオたんぽぽT • お仕事:なんでも嫌がらずやります
3.
昨今のスマフォゲームアプリ事情 • ゲームを複数人で楽しむというのは 当たり前になってきた • 携帯でのよくあるマルチの構成 •
turnserver, photon • clientの一台がhostとなる ようなserver-client構成 中継サーバ Host Client
4.
昨今のスマフォゲームアプリ事情 • 実況中継や大会など多くの人にプレイを視聴される • e-sports •
モンストグランプリ • 閉じられた世界から広くみられる世界に
5.
要求されるもの • 公平さを担保するために不正の排除 • ゲームセーブのようなapi処理だけでなく、ゲーム途中のロジッ クもサーバ側に… •
サーバからリアルタイムにclientにpushするニーズはある • メンテナンス直前にユーザにnotifyする • イベント開始を通知する • ゲームデータ更新等をユーザに促す • サーバクライアントで双方向通信可能な構成
6.
elixir & phoenix •
rubyのプロダクトが既にあるので、導入時の見た目的な アレルギーが少ない(と信じたい) • ゲームサーバなのでsimpleなapiサーバと常時接続型のコ ネクションを簡単に利用したい • 常時接続コネクションを維持しつつホットスワップで deployを行いたい • やっぱり流行には乗っておきたい
7.
Architecture • シンプルな構成例 phoenix server JSON API WebSocket MySQL Redis RabbitMQ /ZeroMQ LB
8.
Architecture • ユーザデータの取得やゲームセーブなどユーザドリブンで発生す る処理はjson(msgpack) api •
websocketはsignup(json api)で発行されたtokenと socket server listから返されるipを使って接続 • 実際に接続するサーバは一緒 • json apiはLBを挟みたいがwebsocketは挟みたくないため • websocket接続先はサーバ側である程度コントロールできる ようにしておきたいという希望もある • アプリ起動時にサーバからのpush用の接続を作成
9.
Architecture • MySQLはもちろんPostgreSQLでもok • adapter書いて好きなものを追加してもok •
ただしadapter書くならEcto2.0を待ってからのほうが 良さそう • Ectoの設計上、shardingを書くのは比較的楽 • Ectoはphoenixで標準で疲れているDB wrapper • 薄いRubyのActiveRecord相当のもの
10.
Architecture • redis • よくあるキャッシュ用とdelayed_job用 •
messaging queue • pub/sub用 • phoenix channel(後述)の仕組みの一部で必要
11.
Phoenix Channel • phoenixが用意するover-httpなリアルタイム通信の仕組み •
L4の生のsocket通信ではない • websocketのオーバヘッドは少なく、 内部のcowboyの実装にも特に問題はない • 開発者曰く、40core/128gbのサーバで 2,000,000 clientは処理可能とのこと • 性能向上の跡 http://goo.gl/w3BtRJ
12.
Phoenix Channel
13.
Phoenix Channel • transport,
channel, pub/sub という3つの要素で構成 • transport • 常時接続コネクションを管理する足回り • ユーザコネクションにつき1 (erlang) process • コネクションとchannelとのやりとりを取り持つ • 通常はシリアライズにjsonを用いるが、シリアライザを 書くことで比較的に簡単に変更できる • msgpack, ProtocolBuffers, FlatBuffers
14.
Phoenix Channel • channel •
transportから送られてくるclientのmessageを受け取る • topicという文字列で送信先を制御する • channelにロジックを実装しmessageを処理する • ここにゲームロジックを実装する! • pub/subのpublisherとなってtopicのsubscriberの transportにmessageを送信する
15.
Phoenix Channel • pub/sub •
デフォルトでerlangのpg2を使用している • pg2でフロント分散するにはclusterを組み必要あり • ただpg2はprocess group参加時に各nodeにlockが 発生するので別のMQを使用するほうが良さそう • redis, RabbitMQ, ZeroMQなどに切り替え可能
16.
ゲーム開始時の接続の流れ • tokenを持ってwebsocketのリクエストを送信 • 認証が完了したらconnectionを確立 phoenix server connection
17.
ゲーム開始時の接続の流れ • json api等で受け取ったgame
idをtopicに含めて channelに接続 • games:fcfe5f21-8a08-4c9a-9f97-29d2fd6a27b9 • gameの参加者だった場合はchannel join成功 phoenix server join event
18.
ゲーム専用コネクションの有無 • アプリ起動時にサーバからのpush用のchannelに接続して いると仮定するとゲーム開始時の通信は2通りの方法がある • 起動時のwebsocketを使ってゲーム用のchannelを接続 •
websocketを使い回すので無駄なheartbeat等を減ら せる • ゲーム開始時に別のゲーム用のwebsocketを接続 • 特定のサーバにゲーム用の接続を誘導できる
19.
ゲーム状態の保持 • ゲームの実装方法もサーバ構成を左右する • ゲームの状態をcacheに接続し、clientからchannelにmessageが来るたび にcacheから状態を読み出し、演算、stateを保存する •
ターン制やレイテンシがそれほど気にならないゲーム向け • websocketの接続先がどこでもよく、再接続にも強い • ゲーム用のprocessを作成し、そこにゲームの状態を維持しつつmessage を処理する • 低レイテンシ要求があるMMOのmapのような分割された構成に向く • 特定のサーバにゲーム参加者が接続をする必要があり、サーバ故障時な どにゲームの状態が失われる可能性がある
20.
client logic • ゲームがオフラインでもプレイできる場合… •
client側にもロジックが必要 • 言語によって同じ実装でも結果が異なる場合がある • c++やc#で書かれたロジックをサーバ側に持ってこれないかも検討している • view層とゲームのコアロジックをいかに切り離すか • phoenixがsocketを管理して、thriftを使ってc++やc#のロジックに演算処 理を委ねる • そもそもこの実装が正しいアプローチなのかも含めて課題 • UnityNetworkの進化に期待したい気持ちも…
21.
deploy • xflagの既存のゲームではプルリクエストがmasterにmergeされたら deployしていいというルールになっている • exrmを使ったchannel接続を維持したままのホットスワップは現時点で は問題なく実行できている •
アプリケーションのバージョンの管理が少し面倒 • ホットスワップの元々の想定はもっとdeploy頻度が低い環境なのかも? • clientの挙動をコントロール可能なゲームなら再接続をきちんと行える ような設計をしたほうがコストは低いかもしれない • ここはもっといい方法がないのか模索しています
22.
まとめ • とりあえずまだまだ試行錯誤ではありますが、elixirでの要 求を満たすようなゲームサーバの実装は可能性がありそう • 今後も継続して試験や導入事例の作成に取り組む予定 •
elixir界隈の方、ぜひ情報共有をしましょう! • http://www.slideshare.net/hidetakakojo/elixir-58090331
Download now