Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
98
ガチャを1から作り直した話 ─規模の拡大につれて開発速度を落とさないための取り組みについて─
genkami
7
4.7k
pt-query-digestをリアルタイムに取りたい!
genkami
0
230
運用未経験の新卒がモンストのメンテに入るまでにやったこと
genkami
0
2.1k
Other Decks in Programming
See All in Programming
Microservices Platforms: When Team Topologies Meets Microservices Patterns
cer
PRO
1
1k
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
110
Rediscover the Console - SymfonyCon Amsterdam 2025
chalasr
2
160
Go コードベースの構成と AI コンテキスト定義
andpad
0
120
ソフトウェア設計の課題・原則・実践技法
masuda220
PRO
26
22k
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
6
3k
Integrating WordPress and Symfony
alexandresalome
0
150
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
160
React Native New Architecture 移行実践報告
taminif
1
150
関数実行の裏側では何が起きているのか?
minop1205
1
680
ZOZOにおけるAI活用の現在 ~モバイルアプリ開発でのAI活用状況と事例~
zozotech
PRO
8
5.5k
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
260
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
GraphQLとの向き合い方2022年版
quramy
50
14k
Visualization
eitanlees
150
16k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
A better future with KSS
kneath
240
18k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.7k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
54k
Typedesign – Prime Four
hannesfritz
42
2.9k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
720
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 観戦用 観戦用
ご清聴ありがとうございました