モンスターストライクのリアルタイム通信を支える技術
by
Genta Kamitani
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
モンスターストライクの リアルタイム通信を支える技術 開発本部 CTO室 SREグループ 神谷 元太 Battle Conference U30 2019 XFLAG
Slide 2
Slide 2 text
自己紹介 ● 神谷 元太 ● Twitter: @cloudear8 ● 2018年 株式会社ミクシィに新卒入社 ● 開発本部 CTO室 SREグループ ● モンスターストライク(モンスト)の 開発・運用等を担当
Slide 3
Slide 3 text
発表の流れ ● モンストの大まかな構成 ● STUN/TURNについて ● モンストでのTURNの使い方 ● まとめ
Slide 4
Slide 4 text
モンストのマルチプレイについて ● 最大4人で協力してクエストを攻略する ● アクションRPG ○ リアルタイムに行動を同期する必要 ● ホスト、ゲストという概念が存在する
Slide 5
Slide 5 text
モンストの大まかな構成 app TURN batch DB guest queue cache host
Slide 6
Slide 6 text
モンストの大まかな構成 app TURN batch DB guest queue cache host
Slide 7
Slide 7 text
モンストの大まかな構成 ● クエスト外用のサーバー(app) ○ 普通のHTTPサーバー ● クエスト内用のサーバー(TURN) ○ ホスト─ゲスト間でクエストの進行状況を同期する app TURN guest host
Slide 8
Slide 8 text
STUN/TURNとは
Slide 9
Slide 9 text
理想 ● ホストとゲストが直接やりとりできると嬉しい! guest host guest guest
Slide 10
Slide 10 text
現実 ● 多くの場合直接通信はできない guest host guest guest N A T N A T N A T N A T ホストどこ…?
Slide 11
Slide 11 text
Session Traversal Utilities for NAT (STUN) ● RFC5389 ● インターネット側から見たIPアドレス、ポートを取得するプロトコル ● 他の拡張と組み合わせて使う client STUN N A T 僕のIPアドレスは? 203.0.113.45 です
Slide 12
Slide 12 text
Traversal Using Relays around NAT (TURN) ● RFC5766 ● STUNの拡張 ● 端末間の通信を仲介する ● UDP, TCP, TLS-over-TCPに対応 client TURN N A T peer N A T
Slide 13
Slide 13 text
TURN Extensions for TCP Allocations ● RFC6062 ● TURNでTCPを使うための拡張 ● クライアントはサーバーと二種類のコネクションを張る ● モンストではこれを使う client TURN N A T peer N A T
Slide 14
Slide 14 text
モンストでのTURNの使い方
Slide 15
Slide 15 text
サーバー構成のおさらい ● クライアント == ホスト ● ピア == ゲスト app TURN guest host peer client == ==
Slide 16
Slide 16 text
TURNサーバーのDiscovery ● appサーバーからTURNのIPアドレスを取得 ○ ロードバランシングも兼ねている ● DNSを使ったDiscoveryは行っていない ● ALTERNATE-SERVER も使っていない host app TURNはどこ? 198.51.100.67:3478 か 198.51.100.68:3478 をみてね
Slide 17
Slide 17 text
ホスト・ゲストのマッチングからゲーム開始まで ● ホストがTURNサーバーと接続 ● TURNの情報をapp経由でゲストとやり取り ● ゲストがホストに接続できたらクエスト開始 app TURN host guest
Slide 18
Slide 18 text
ホスト・ゲストのマッチングからゲーム開始まで ● ホストがTURNサーバーと接続 ● TURNの情報をapp経由でゲストとやり取り ● ゲストがホストに接続できたらクエスト開始 app TURN host guest ゲストは 198.51.100.67:12345 に繋いでね どこに繋げば マルチできるの?
Slide 19
Slide 19 text
ホスト・ゲストのマッチングからゲーム開始まで ● ホストがTURNサーバーと接続 ● TURNの情報をapp経由でゲストとやり取り ● ゲストがホストに接続できたらクエスト開始 app TURN host guest
Slide 20
Slide 20 text
IPv6対応 ● TURNのIPv4アドレスを受け取る ● IPv4アドレスから機械的にドメインを生成 ● DNS64サーバーからIPv6アドレスを取得 ● NAT64でIPv4に変換されてTURNに届く app TURNはどこ? 198.51.100.67:3478 か 198.51.100.68:3478 をみてね host
Slide 21
Slide 21 text
IPv6対応 ● まずはTURNのIPv4アドレスを受け取る ● IPv4アドレスから機械的にドメインを生成 ● DNS64サーバーからIPv6アドレスを取得 ● NAT64でIPv4に変換されてTURNに届く 198.51.100.67 ↓ ip-198-51-100-67.example.com host
Slide 22
Slide 22 text
IPv6対応 ● まずはTURNのIPv4アドレスを受け取る ● IPv4アドレスから機械的にドメインを生成 ● DNS64サーバーからIPv6アドレスを取得 ● NAT64でIPv4に変換されてTURNに届く DNS64 ip-198-51-100-67.example.com AAAA 64:ff9b::c633:6443 host
Slide 23
Slide 23 text
IPv6対応 ● まずはTURNのIPv4アドレスを受け取る ● IPv4アドレスから機械的にドメインを生成 ● DNS64サーバーからIPv6アドレスを取得 ● NAT64でIPv4に変換されてTURNに届く 64:ff9b::c633:6443 TURN NAT64 198.51.100.67 host
Slide 24
Slide 24 text
まとめ
Slide 25
Slide 25 text
まとめ ● クエスト内とクエスト外で仕組みが大きく違う ● ホスト─ゲスト間の通信はTURNサーバー経由 ● IPv6対応はDNS64 + NAT64
Slide 26
Slide 26 text
おまけ
Slide 27
Slide 27 text
モンスターストライクスタジアム ● 最大4対4でクエストのクリア時間を競う ● TURNのコネクションは二種類 ○ チーム内のホスト─ゲスト間の通信用 ○ チーム同士のクエスト進行情報の共有用 ← new! TURN host guest TURN host guest TURN
Slide 28
Slide 28 text
大会での観戦用端末 ● TURNのコネクションは三種類 ○ チーム内のホスト─ゲスト間の通信用 ○ チーム同士のクエスト進行情報の共有用 ○ 観戦用端末へのクエスト情報同期用 ← new! TURN host guest TURN host guest TURN TURN TURN 観戦用 観戦用
Slide 29
Slide 29 text
ご清聴ありがとうございました