Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Hidetaka Kojo
16,029 views
elixirを使ったゲームサーバ
XFLAG™スタジオ engineer meet up 2016 の発表資料
Engineering
◦
Read more
31
Save
Share
Embed
Embed presentation
Download
Downloaded 29 times
1
/ 22
2
/ 22
3
/ 22
4
/ 22
5
/ 22
6
/ 22
7
/ 22
8
/ 22
9
/ 22
10
/ 22
11
/ 22
12
/ 22
13
/ 22
14
/ 22
15
/ 22
16
/ 22
17
/ 22
18
/ 22
19
/ 22
20
/ 22
21
/ 22
22
/ 22
More Related Content
PPTX
なぜなにリアルタイムレンダリング
by
Satoshi Kodaira
PDF
Steam ゲーム内購入 サーバーサイド実装について
by
KLab Inc. / Tech
PDF
フロー効率性とリソース効率性、再入門 #devlove #devkan
by
Itsuki Kuroda
PDF
UE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DD
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
by
Yoshiki Hayama
PDF
ドメイン駆動設計 基本を理解する
by
増田 亨
PDF
ドメインオブジェクトの見つけ方・作り方・育て方
by
増田 亨
PPTX
イベント・ソーシングを知る
by
Shuhei Fujita
なぜなにリアルタイムレンダリング
by
Satoshi Kodaira
Steam ゲーム内購入 サーバーサイド実装について
by
KLab Inc. / Tech
フロー効率性とリソース効率性、再入門 #devlove #devkan
by
Itsuki Kuroda
UE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DD
by
エピック・ゲームズ・ジャパン Epic Games Japan
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
by
Yoshiki Hayama
ドメイン駆動設計 基本を理解する
by
増田 亨
ドメインオブジェクトの見つけ方・作り方・育て方
by
増田 亨
イベント・ソーシングを知る
by
Shuhei Fujita
What's hot
PDF
オンラインゲームの仕組みと工夫
by
Yuta Imai
PDF
UE4でマルチプレイヤーゲームを作ろう
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
by
historia_Inc
PDF
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
by
エピック・ゲームズ・ジャパン Epic Games Japan
PPTX
ゲームエンジニアのためのデータベース設計
by
sairoutine
PDF
非同期ロード画面 Asynchronous Loading Screen
by
エピック・ゲームズ・ジャパン Epic Games Japan
PPTX
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
by
sairoutine
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
PDF
猫でも分かるUE4のポストプロセスを使った演出・絵作り
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
目grep入門 +解説
by
murachue
PDF
マイクロサービスバックエンドAPIのためのRESTとgRPC
by
disc99_
PDF
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
PPTX
Raspberry Piで始める自宅サーバー超入門
by
VirtualTech Japan Inc./Begi.net Inc.
PDF
UE4におけるエフェクトの為のエンジン改造事例
by
エピック・ゲームズ・ジャパン Epic Games Japan
PPTX
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
【UE4.25 新機能】新しいシリアライゼーション機能「Unversioned Property Serialization」について
by
エピック・ゲームズ・ジャパン Epic Games Japan
DOCX
UE4でPerforceと連携するための手順
by
エピック・ゲームズ・ジャパン Epic Games Japan
PPTX
UE4アセットリダクション手法紹介
by
エピック・ゲームズ・ジャパン Epic Games Japan
PPTX
UE4のスレッドの流れとInput Latency改善の仕組み
by
エピック・ゲームズ・ジャパン Epic Games Japan
PPTX
UE4の色について v1.1
by
エピック・ゲームズ・ジャパン Epic Games Japan
オンラインゲームの仕組みと工夫
by
Yuta Imai
UE4でマルチプレイヤーゲームを作ろう
by
エピック・ゲームズ・ジャパン Epic Games Japan
目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
by
historia_Inc
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
by
エピック・ゲームズ・ジャパン Epic Games Japan
ゲームエンジニアのためのデータベース設計
by
sairoutine
非同期ロード画面 Asynchronous Loading Screen
by
エピック・ゲームズ・ジャパン Epic Games Japan
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
by
sairoutine
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
猫でも分かるUE4のポストプロセスを使った演出・絵作り
by
エピック・ゲームズ・ジャパン Epic Games Japan
目grep入門 +解説
by
murachue
マイクロサービスバックエンドAPIのためのRESTとgRPC
by
disc99_
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
Raspberry Piで始める自宅サーバー超入門
by
VirtualTech Japan Inc./Begi.net Inc.
UE4におけるエフェクトの為のエンジン改造事例
by
エピック・ゲームズ・ジャパン Epic Games Japan
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
by
エピック・ゲームズ・ジャパン Epic Games Japan
【UE4.25 新機能】新しいシリアライゼーション機能「Unversioned Property Serialization」について
by
エピック・ゲームズ・ジャパン Epic Games Japan
UE4でPerforceと連携するための手順
by
エピック・ゲームズ・ジャパン Epic Games Japan
UE4アセットリダクション手法紹介
by
エピック・ゲームズ・ジャパン Epic Games Japan
UE4のスレッドの流れとInput Latency改善の仕組み
by
エピック・ゲームズ・ジャパン Epic Games Japan
UE4の色について v1.1
by
エピック・ゲームズ・ジャパン Epic Games Japan
Viewers also liked
PPTX
【初心者向け】Go言語勉強会資料
by
Yuji Otani
PDF
実環境にTerraform導入したら驚いた
by
Akihiro Kuwano
PDF
スマートフォンゲームのチート事情
by
直生 亀山
PDF
今日から始めるGopher - スタートGo #0 @GDG名古屋
by
Takuya Ueda
PDF
2017冬の開発合宿vrオンラインゲーム
by
Syo Igarashi
PDF
Terraform始めました
by
w1mvy pine
PDF
Go言語オーバービュー201507
by
エンジニア勉強会 エスキュービズム
PDF
私なりのGo言語のご紹介
by
Ryuji Iwata
PPTX
Windsor castle
by
Marisolaguilar
【初心者向け】Go言語勉強会資料
by
Yuji Otani
実環境にTerraform導入したら驚いた
by
Akihiro Kuwano
スマートフォンゲームのチート事情
by
直生 亀山
今日から始めるGopher - スタートGo #0 @GDG名古屋
by
Takuya Ueda
2017冬の開発合宿vrオンラインゲーム
by
Syo Igarashi
Terraform始めました
by
w1mvy pine
Go言語オーバービュー201507
by
エンジニア勉強会 エスキュービズム
私なりのGo言語のご紹介
by
Ryuji Iwata
Windsor castle
by
Marisolaguilar
Similar to elixirを使ったゲームサーバ
PDF
ニコニコを支える Erlang / Elixir
by
kojingharang
PDF
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
by
Satoshi Yamafuji
PPT
Heliumエンジンの設計と実装
by
DADA246
PPTX
2023-10-10_ElixirConf US 2023に参加してきました(レポート)
by
哲輝 周
PDF
小規模アプリ開発者が中から見るモンスターストライク
by
yoshiteru kawamata
PDF
ゲームサーバ開発現場の考え方
by
Daisaku Mochizuki
PPTX
running-elixir-in-production
by
Tsunenori Oohara
PPTX
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
by
fukuoka.ex
ニコニコを支える Erlang / Elixir
by
kojingharang
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
by
Satoshi Yamafuji
Heliumエンジンの設計と実装
by
DADA246
2023-10-10_ElixirConf US 2023に参加してきました(レポート)
by
哲輝 周
小規模アプリ開発者が中から見るモンスターストライク
by
yoshiteru kawamata
ゲームサーバ開発現場の考え方
by
Daisaku Mochizuki
running-elixir-in-production
by
Tsunenori Oohara
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
by
fukuoka.ex
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