Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
モンスターストライクのリアルタイム通信を支える技術
Search
Genta Kamitani
July 06, 2019
Programming
12k
8
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
モンスターストライクのリアルタイム通信を支える技術
Genta Kamitani
July 06, 2019
More Decks by Genta Kamitani
See All by Genta Kamitani
ミクシィの技術選定
genkami
0
140
ガチャを1から作り直した話 ─規模の拡大につれて開発速度を落とさないための取り組みについて─
genkami
7
4.8k
pt-query-digestをリアルタイムに取りたい!
genkami
0
270
運用未経験の新卒がモンストのメンテに入るまでにやったこと
genkami
0
2.2k
Other Decks in Programming
See All in Programming
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
170
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
630
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
2
2k
Are APIs Still Relevant in the AI Era?
soyuka
0
430
wkhtmltopdfの次どうするか問題2026
willnet
2
1.9k
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
920
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
390
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
550
dotNET_vulnclicker_intro.pdf
deka_morita
0
110
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
320
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
210
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
160
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
330
41k
A designer walks into a library…
pauljervisheath
211
25k
Being A Developer After 40
akosma
91
590k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
The SEO Collaboration Effect
kristinabergwall1
1
590
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
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 観戦用 観戦用
ご清聴ありがとうございました