clusterのserverについて(入門編)
これはcluster Advent Calendar 2019 17日目の記事です。
前日は ∞∞hk∞∞ひきこもり衆さん の「新しい世界で出会ったお姫様|hk|note」でした。
めちゃくちゃエモいですね。いい話...!
はじめに
自分のことを知らないひとが結構多いと思うので、簡単に自己紹介します。
2016年10月に入社してたので、クラスター社で働くようになってどうやら4年目に突入していました 😙
現在は、サーバーの開発をメインにやってます。 初期の方の5人とかだったときはUnityクライアント側とかも何でもやってたんですが、今は社員がたくさんいるのでサーバーの担当となってます 🎉🎉🎉
今回は、clusterのサーバーサイドの全体構成についてざっくりとした説明と、clusterでは実際どういう通信が行われているのかをいくつかピックアップして紹介していきたいと思います。
全体構成
- MQTTサーバー: MQTTというプロトコルでpub/subを行いリアルタイムの通信で使うサーバー(位置情報や音声、体の身ぶり手ぶりなどの同期)
- APIサーバー: ユーザーの作成、イベントの作成、イベントの入室記録などなど
- Webサイト: ブラウザー上で動いてる部分(ログイン、チケット購入、入室までの流れなどなど)
- Unityクライアント: 入室後のVR空間内で操作するクライアントアプリ(VR/Desktop版)
- Stripe: 決済代行の外部サービス (クレジットカード情報などを安全に扱う)
- Firebase Authentication: さまざまなプロバイダー(Twitter/Facebook/Googleなど)を使用した認証を行うことができ、ユーザー ID を識別できるようにする外部サービス
ログイン
上記の図のような流れで、TwitterやFacebookなどの認証でclusterにログインする部分でFirebase Authenticationを使ってます。
Firebase Authenticationを使うことによって パスワード
、電話番号
、一般的なフェデレーション ID プロバイダ(Google
、Facebook
、Twitter
) などを使用した認証を行うことができます。
そのため将来的には他のプロバイダー追加やアカウントの移行とかが簡単にできるはずなので、乞うご期待...!という感じです。
チケット決済
Webブラウザ ーで入力したクレジットカード情報は、Stripeに送信してStripe側で生成されたトークンをclusterのサーバーに送ってもらっています。
このトークンからcluster社がクレジットカード情報を参照したり、トークンを他ユーザーが推測したりすることができないようになっているため、ユーザーの皆様は安全にクレジットカード決済を行うことができるようになっています。
ルーム内でのリアルタイム通信
音声/位置/3点・6点トラッキング情報など送信
音声や、位置情報、3点・6点トラッキングによる体の向きや身ぶり手ぶりの情報はAPIサーバーを経由せず、直接MQTTサーバーに送信しています。
これが、いわゆるMO体験な部分を実現しているリアルタイム通信です。
コメント送信
コメントの送信は、1回サーバーを経由して送信するパターンです。
こちらも音声や位置情報のように直接MQTTサーバーに送信しちゃってもいいんですが、後から入室した人でも過去のコメントが読めるようにすることなど考えると、データベースに保存する必要があるためAPIサーバーを経由しています。
一定周期ごとに送信
あとは、一定周期で実行され今の部屋の状態をまとめて計算して送信するバッチのような処理があります。
誰がいま入室していてどういうアバターの見た目で、誰がいまスタッフなのか?誰がいまゲストなのか?など、さまざまな情報を送信しています。
おわり
サーバー側ってなんか大変そうだな〜と思っていた人も、何をやってるか全然わからない〜と思っていた人も、興味を持っていただけたのであれば幸いです 😌
明日は、よしおか こうさん の「clusterデフォルトアバターのデザイン話」です。 アバターのデザインは、たくさんの歴史があるので楽しみです。