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
12k
モンスターストライクのリアルタイム通信を支える技術
Genta Kamitani
July 06, 2019
Tweet
Share
More Decks by Genta Kamitani
See All by Genta Kamitani
ミクシィの技術選定
genkami
0
100
ガチャを1から作り直した話 ─規模の拡大につれて開発速度を落とさないための取り組みについて─
genkami
7
4.7k
pt-query-digestをリアルタイムに取りたい!
genkami
0
230
運用未経験の新卒がモンストのメンテに入るまでにやったこと
genkami
0
2.1k
Other Decks in Programming
See All in Programming
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
170
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.9k
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
3.9k
今から始めるClaude Code超入門
448jp
8
8.6k
AI時代の認知負荷との向き合い方
optfit
0
160
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.2k
組織で育むオブザーバビリティ
ryota_hnk
0
170
CSC307 Lecture 01
javiergs
PRO
0
690
Data-Centric Kaggle
isax1015
2
770
SourceGeneratorのススメ
htkym
0
190
ぼくの開発環境2026
yuzneri
0
210
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.3k
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.9k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
280
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
940
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3k
Paper Plane (Part 1)
katiecoart
PRO
0
4.1k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
420
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
110
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
220
Prompt Engineering for Job Search
mfonobong
0
160
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
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 観戦用 観戦用
ご清聴ありがとうございました