Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
モンスターストライクのリアルタイム通信を支える技術
Search
Genta Kamitani
July 06, 2019
Programming
8
11k
モンスターストライクのリアルタイム通信を支える技術
Genta Kamitani
July 06, 2019
Tweet
Share
More Decks by Genta Kamitani
See All by Genta Kamitani
ミクシィの技術選定
genkami
0
36
ガチャを1から作り直した話 ─規模の拡大につれて開発速度を落とさないための取り組みについて─
genkami
7
4.3k
pt-query-digestをリアルタイムに取りたい!
genkami
0
170
運用未経験の新卒がモンストのメンテに入るまでにやったこと
genkami
0
1.8k
Other Decks in Programming
See All in Programming
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.4k
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
110
大規模Reactアプリのリアーキテクチャ~8万行のTanStack Query移行の軌跡~
kj455
4
960
スキーマ駆動開発による品質とスピードの両立 - 私達は何故、スキーマを書くのか
kentaroutakeda
0
170
検証も兼ねて個人開発でHonoとかと向き合った話
hanetsuki
1
1.1k
Scalable Customer Journey Orchestration (CJO)
lewuathe
0
340
コーンフレークから始める モデリング会話入門
ogurotakayuki
0
370
PHPの次期バージョンはこの時期どうなっているのか - Internalsの開発体制について - PHPカンファレンス小田原
youkidearitai
PRO
1
190
Ruby Pattern Matching
bkuhlmann
0
930
Behind VS Code Extensions for JavaScript / TypeScript Linnting and Formatting
unvalley
5
930
使ってみよう Azure AI Document Intelligence
kosmosebi
2
320
ONE WEDGE_company_guide
1wedge_one
0
490
Featured
See All Featured
The Invisible Side of Design
smashingmag
294
49k
Music & Morning Musume
bryan
41
5.6k
What the flash - Photography Introduction
edds
64
11k
What’s in a name? Adding method to the madness
productmarketing
PRO
16
2.6k
Agile that works and the tools we love
rasmusluckow
325
20k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
14
1.6k
10 Git Anti Patterns You Should be Aware of
lemiorhan
648
58k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Visualization
eitanlees
136
14k
Become a Pro
speakerdeck
PRO
11
4.5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
2
3.4k
Build your cross-platform service in a week with App Engine
jlugia
225
17k
Transcript
モンスターストライクの リアルタイム通信を支える技術 開発本部 CTO室 SREグループ 神谷 元太 Battle Conference
U30 2019 XFLAG
自己紹介 • 神谷 元太 • Twitter: @cloudear8 • 2018年 株式会社ミクシィに新卒入社
• 開発本部 CTO室 SREグループ • モンスターストライク(モンスト)の 開発・運用等を担当
発表の流れ • モンストの大まかな構成 • STUN/TURNについて • モンストでのTURNの使い方 • まとめ
モンストのマルチプレイについて • 最大4人で協力してクエストを攻略する • アクションRPG ◦ リアルタイムに行動を同期する必要 • ホスト、ゲストという概念が存在する
モンストの大まかな構成 app TURN batch DB guest queue cache host
モンストの大まかな構成 app TURN batch DB guest queue cache host
モンストの大まかな構成 • クエスト外用のサーバー(app) ◦ 普通のHTTPサーバー • クエスト内用のサーバー(TURN) ◦ ホスト─ゲスト間でクエストの進行状況を同期する app
TURN guest host
STUN/TURNとは
理想 • ホストとゲストが直接やりとりできると嬉しい! guest host guest guest
現実 • 多くの場合直接通信はできない guest host guest guest N A T
N A T N A T N A T ホストどこ…?
Session Traversal Utilities for NAT (STUN) • RFC5389 • インターネット側から見たIPアドレス、ポートを取得するプロトコル
• 他の拡張と組み合わせて使う client STUN N A T 僕のIPアドレスは? 203.0.113.45 です
Traversal Using Relays around NAT (TURN) • RFC5766 • STUNの拡張
• 端末間の通信を仲介する • UDP, TCP, TLS-over-TCPに対応 client TURN N A T peer N A T
TURN Extensions for TCP Allocations • RFC6062 • TURNでTCPを使うための拡張 •
クライアントはサーバーと二種類のコネクションを張る • モンストではこれを使う client TURN N A T peer N A T
モンストでのTURNの使い方
サーバー構成のおさらい • クライアント == ホスト • ピア == ゲスト app
TURN guest host peer client == ==
TURNサーバーのDiscovery • appサーバーからTURNのIPアドレスを取得 ◦ ロードバランシングも兼ねている • DNSを使ったDiscoveryは行っていない • ALTERNATE-SERVER も使っていない
host app TURNはどこ? 198.51.100.67:3478 か 198.51.100.68:3478 をみてね
ホスト・ゲストのマッチングからゲーム開始まで • ホストがTURNサーバーと接続 • TURNの情報をapp経由でゲストとやり取り • ゲストがホストに接続できたらクエスト開始 app TURN
host guest
ホスト・ゲストのマッチングからゲーム開始まで • ホストがTURNサーバーと接続 • TURNの情報をapp経由でゲストとやり取り • ゲストがホストに接続できたらクエスト開始 app TURN
host guest ゲストは 198.51.100.67:12345 に繋いでね どこに繋げば マルチできるの?
ホスト・ゲストのマッチングからゲーム開始まで • ホストがTURNサーバーと接続 • TURNの情報をapp経由でゲストとやり取り • ゲストがホストに接続できたらクエスト開始 app TURN
host guest
IPv6対応 • TURNのIPv4アドレスを受け取る • IPv4アドレスから機械的にドメインを生成 • DNS64サーバーからIPv6アドレスを取得 • NAT64でIPv4に変換されてTURNに届く app
TURNはどこ? 198.51.100.67:3478 か 198.51.100.68:3478 をみてね host
IPv6対応 • まずはTURNのIPv4アドレスを受け取る • IPv4アドレスから機械的にドメインを生成 • DNS64サーバーからIPv6アドレスを取得 • NAT64でIPv4に変換されてTURNに届く 198.51.100.67
↓ ip-198-51-100-67.example.com host
IPv6対応 • まずはTURNのIPv4アドレスを受け取る • IPv4アドレスから機械的にドメインを生成 • DNS64サーバーからIPv6アドレスを取得 • NAT64でIPv4に変換されてTURNに届く DNS64
ip-198-51-100-67.example.com AAAA 64:ff9b::c633:6443 host
IPv6対応 • まずはTURNのIPv4アドレスを受け取る • IPv4アドレスから機械的にドメインを生成 • DNS64サーバーからIPv6アドレスを取得 • NAT64でIPv4に変換されてTURNに届く 64:ff9b::c633:6443
TURN NAT64 198.51.100.67 host
まとめ
まとめ • クエスト内とクエスト外で仕組みが大きく違う • ホスト─ゲスト間の通信はTURNサーバー経由 • IPv6対応はDNS64 + NAT64
おまけ
モンスターストライクスタジアム • 最大4対4でクエストのクリア時間を競う • TURNのコネクションは二種類 ◦ チーム内のホスト─ゲスト間の通信用 ◦ チーム同士のクエスト進行情報の共有用 ←
new! TURN host guest TURN host guest TURN
大会での観戦用端末 • TURNのコネクションは三種類 ◦ チーム内のホスト─ゲスト間の通信用 ◦ チーム同士のクエスト進行情報の共有用 ◦ 観戦用端末へのクエスト情報同期用 ←
new! TURN host guest TURN host guest TURN TURN TURN 観戦用 観戦用
ご清聴ありがとうございました