
2025.02.18
「売上をスケールする」AIの使い道とは アルペンが挑む、kintone×生成AIの接客データ活用法
モンスターストライクのリアルタイム通信を支える技術(全1記事)
リンクをコピー
記事をブックマーク
神谷元太氏:それでは「モンスターストライクのリアルタイム通信を支える技術」というタイトルで発表させていただきます。よろしくお願いします。
(会場拍手)
まず最初に軽く自己紹介をさせていただきたいと思います。2018年に株式会社ミクシィに新卒入社をしました。開発本部CTO室SREグループの神谷と言います。よろしくお願いします。業務内容としては主にモンストの開発や運用などを担当しています。
この発表ではモンストの大まかな構成について触れたあとに、主にモンストがマルチプレイで使っている「STUN/TURN」という技術について紹介していきたいと思います。
まず最初に前提として、モンストのマルチプレイについて軽く触れていきたいと思います。モンストは最大4人で協力してクエストを攻略していくゲームですけど、1つ重要な要素として「アクションゲームである」という点があります。そのため各プレイヤーの行動が他のプレイヤーにリアルタイムに伝わっていく必要があります。
また、ホスト・ゲストという概念が存在して、ホストが部屋を作ってゲストがその中に入っていくというようなイベントになっている点だけ覚えておいてください。
次にモンストの大まかな構成について説明します。こんな感じでモンストにはいろんなサーバがあるんですけど、今回は(スライド左側を指して)この辺だけの説明をします。
このうち、guestと書いてあるのが、いわゆるアプリ側、クライアント側です。クライアントはappサーバとTURNサーバと呼ばれている2種類のサーバと接続します。
このappと呼ばれているものは、普通のHTTPサーバで、これはクエストの外で使われます。そしてもう1つがTURNというサーバで、これはクエスト内でホストとゲストがクエストの状況を同期するのに使われています。
次に「このTURNとはなんぞや?」という話をしていきたいと思います。
その前に「なぜSTUN/TURNというものが必要なのか?」という話なんですけど、理想的なマルチプレイの状況としては例えばホストがサーバになったりしてゲストがホストに通信できて、そのままやりとりができたらすごいうれしいですよね。
ただ現実はうまくいかなくて、基本的にホストもゲストもNATの奥側にいるので、ゲストがホストに直接通信をするのは基本的には無理になっています。
それを解決するための技術が、STUNやTURNとか言われているやつですね。まずはその1つ目のSTUNについて説明します。これはRFC5389で定義されているプロトコルで、これはすごい単純なものでクライアントがサーバにSTUNのリクエストを送ったときに、STUNサーバのほうがクライアントのインターネット側から見えるIPアドレスをそのまま返すだけというすごくシンプルなプロトコルになっています。
基本的にSTUNを単体で使うことはなくて、他のSTUNの拡張がこれから出てくるんですけど、そのいろいろな拡張と組み合わせてホストとゲストの通信を実現していくかたちになっていきます。
次にTURNの説明をしていきたいと思います。TURNはRFC5766で定義されているSTUNの拡張です。これはクライアントとサーバ以外にピアと呼ばれるものが出てきます。「ピアとは何か?」というと、TURNサーバを経由してクライアントと通信をしたい人のことです。
TURNサーバはSTUNの持つ機能の他に、クライアントとサーバが通信する以外にももう1個ポートを開けてそこにピアが接続することによって、ピアとクライアントがあたかも直接通信を行っているかのようにデータのやりとりを中継することができます。
さらにTURNでTCPを使うための拡張としてRFC6062で定義されているものがあります。こちらはちょっとやり方が変わって、クライアントとTURNのコネクションが2種類に増えます。片方がコントロールコネクションと呼ばれているもので、これを使ってクライアントはTURNに「このピアと接続したい」というような命令を送ったりします。もう片方がデータコネクションと言われるコネクションで、これを使ってクライアントとピアは疑似的に1対1の通信を行うことができます。
モンストではこの方法を使ってホストとゲストの間でTCP通信を行っています。
次に「モンストでどのようにTURNを使っているか?」という話をしていきます。まず最初にサーバ構成のおさらいです。
このようにappとTURNの2つのサーバが出てきて、モンストの場合はホストがTURNのクライアント、ゲストがTURNのピアという扱いになっています。
まず最初にクライアント側。ホストやゲストがどのようにしてTURNサーバを見つけているかの話をしていきたいと思います。まず、ホストは普通のHTTPサーバであるappサーバに対してTURNの所在を問い合わせます。
するとappサーバはappの知っているTURNサーバのIPアドレスとポートの組み合わせの中からランダムに数個をホストに返します。これによってTURNサーバのロードバランシングも兼ねています。
また、TURNのRFCだったりそれ以外とかで、TURNのディスカバリーの方法はいくつか定義されているんですけど、モンストではそういうのは使っておらず、このような方法を取っております。またTURNには「ALTERNATE-SERVER」という「今は自分のTURNサーバは手いっぱいだから他のTURNサーバを見てね」という機能があるんですけど、これもモンストでは使っていません。
次にホスト側につないでからホストとゲストのコネクションが確立されるまでの流れについて説明していきます。ホストは先ほどの手順でTURNサーバのIPアドレスとポートを取得し、TURNサーバに接続をします。そしてTURNサーバのAllocationが取れると、TURNサーバはゲストがつなぐ用のポートを開いてその情報をホストに返します。
するとホストはそれをappサーバに登録します。このようにしてホストとゲストがTURNサーバにつなげために必要な情報をappサーバを介してやりとりします。
最終的にこのようにゲストとホストがTURNサーバを返して接続ができたらクエストが開始されます。
次に、IPv6の対応について説明していきたいと思います。やっぱり今のこのアプリケーションとなるとIPv6に対応していないといけないですし、対応ていないアプリは審査に通らないというようなこともあるので、こうなると重要な話になってきます。
モンストの場合、何が一番大変かと言うと、普通のTURNはIPv4しか対応をしていないんですね。TURNのIPv6に対応できるようなRFCの拡張もあるんですけど、モンストではそれを使わずに次のような方法を取っています。今回はその流れについて説明します。
ホストがIPv6に対応している場合でも、まず最初にTURNのIPアドレスをappサーバから取得するところまではIPv4と同じ流れになっています。このとき返されるIPアドレスもIPv4のものになっています。その後ホストはあらかじめ決められた手順でIPサーバから一意に生成できるドメインを生成します。
これでポイントになっているのは、モンストのTURNサーバはすべて自身のグローバルIPアドレスと、それに対応した一意に生成できるドメインを持っています。
ドメインを生成するとクライアント側はそのドメインに対するAAAAレコードをDNS64サーバに問い合わせます。そして疑似的なTURNのIPv6のアドレスを取得します。
そして、ホストはそのIPv6アドレスがTURNのアドレスと思い込んだまま、TURNと普通に通信をします。しかし、間にNAT64のゲートウェイが挟まっているので、こいつがIPv4に変換をして無事にTURNとつながるというかたちになっています。
まとめを話していきたいと思います。モンストではクエスト内とクエスト外で仕組みがそれぞれ大きく違って、つなぐサーバも違う設計になっています。また、ホストとゲストの間ではTURNというプロトコルを使って、TURNサーバ経由で通信を行っています。そしてIPv6の対応は、TURNのIPv6用の拡張を使うのではなく、DNS64とNAT64を使っています。
モンストは本家のアプリ以外にも「モンスターストライクスタジアム」という対戦用のアプリがあるんですけど、こちらはホストとゲストの通信以外にも各チームごとにクエストの進行状況をやりとりするためのTURNが存在して、このようにチーム1のホストとゲストとチーム2のホストとゲストの間のTURNの他に各チームのホスト同士のTURNの接続も出てきます。
もう1つ、モンストスタジアムを使ったモンストのeスポーツ大会がありまして、これはその先ほどの対戦を会場で行ってそれがリアルタイムで中継されるかたちになっています。その中継の映像を再生する用の観戦端末もこのように各チームのホストとTURNで接続して、それぞれクエストの進行状況をやりとりしている流れになっています。
それでは時間がきましたので、発表は以上にしたいと思います。ご清聴ありがとうございました。
(会場拍手)
2025.03.21
マネージャーの「自分でやったほうが早い」という行動で失うもの 効率・スピード重視の職場に足りていない考え方
2025.03.17
不確実な時代だからこそ「知らないこと」を武器にする ハーバード首席卒業生の逆説的なメッセージ
2025.03.19
部下の「タスクの先延ばし」が少ない上司の特徴とは? 研究が示す、先延ばし行動を減らすリーダーの条件
2025.03.17
いくら読書をしても「成長しない人」が見落としていること 10分でできる「正しい学び方」
2025.03.19
組織をダメにする“害虫”の正体は間違った思い込み AIやDXなど手段のみにこだわるダメ上司の見極め方
2025.03.19
フェデラー氏が語る「ただの1ポイント」の哲学 ウィンブルドン敗北から学んだ失敗からの立ち直り方
2025.03.18
フェデラー氏が語る「努力しない成功は神話」という真実 ダートマス卒業生に贈る勝利の秘訣
2025.03.18
全知全能の最先端AI「Cristal」が企業の大脳となる ソフトバンク孫正義氏が語る、現代における「超知性」の可能性
2025.03.18
部下に「そうかなぁ?」と思われない1on1の問いかけ エンゲージメントを高めるマネジメントに欠かせない「聴く」技術
2025.03.19
OpenAIのAIエージェント「Deep research」はビジネスをどう変革するのか? サム・アルトマン氏ら4人がデモンストレーション
2025.03.21
マネージャーの「自分でやったほうが早い」という行動で失うもの 効率・スピード重視の職場に足りていない考え方
2025.03.17
不確実な時代だからこそ「知らないこと」を武器にする ハーバード首席卒業生の逆説的なメッセージ
2025.03.19
部下の「タスクの先延ばし」が少ない上司の特徴とは? 研究が示す、先延ばし行動を減らすリーダーの条件
2025.03.17
いくら読書をしても「成長しない人」が見落としていること 10分でできる「正しい学び方」
2025.03.19
組織をダメにする“害虫”の正体は間違った思い込み AIやDXなど手段のみにこだわるダメ上司の見極め方
2025.03.19
フェデラー氏が語る「ただの1ポイント」の哲学 ウィンブルドン敗北から学んだ失敗からの立ち直り方
2025.03.18
フェデラー氏が語る「努力しない成功は神話」という真実 ダートマス卒業生に贈る勝利の秘訣
2025.03.18
全知全能の最先端AI「Cristal」が企業の大脳となる ソフトバンク孫正義氏が語る、現代における「超知性」の可能性
2025.03.18
部下に「そうかなぁ?」と思われない1on1の問いかけ エンゲージメントを高めるマネジメントに欠かせない「聴く」技術
2025.03.19
OpenAIのAIエージェント「Deep research」はビジネスをどう変革するのか? サム・アルトマン氏ら4人がデモンストレーション
青木耕平さんとザッソウ(#156〜158)
2025.02.05 - 2025.03.19
片付けパパ対談【特別編】豊かな人生を過ごすための「投資」&「交渉術」 ~チャンスを逃さず信頼関係も育むコツ~
2025.02.10 - 2025.02.10
グローバルの経営理論に学ぶ、企業アルムナイ成功への示唆〜中央大学ビジネススクール 犬飼知徳教授
2025.02.18 - 2025.02.18
【手放すTALK LIVE#046】 出版記念イベント 『大きなシステムと小さなファンタジー』 一つ一つのいのちが大切にされる社会へ
2025.02.03 - 2025.02.03
「聴く」から始まる組織変革 〜篠田真貴子さんと考える対話型マネジメント〜
2025.02.14 - 2025.02.14