はじめに
この記事はVRサービス「VirtualCast」で使用できるVCIという仕組みについて扱った記事です。
要約
- message式の早押しVCIで押してるのに反応が遅いという報告があった
- 実験的にmessageとstateで差分を測定
- messageの方がstateより反映が遅めか同等。さらにmessageはたまに大きく遅れることがあった
ことの発端
私の作ったVCIに、早押しクイズ企画などでの使用を想定した早押し機というアイテムがあります。
このVCIを使用している一部の方から「押したのに反応が遅く、他の人に押し負ける」という意見がありました。
はじめは回線ラグのせいかと思いましたが詳しく話を聞いてみたところ、別の早押しVCIではそのような現象は発生しないという話を受けました。
そのため、その2つのVCIの仕組みを比較し、私のVCIでだけなぜ押してから反応するまでの遅延が発生するのかを実験的に調べました。
2つの早押しVCIの仕組み
上記2つのVCIは基本的な仕組みは同じで、複数いる回答者が持っているボタンを押すと出題者へボタンを押したという情報を送り、出題者の方で受け取った情報をもとに着順判定をするというものです。
ただ、実際のコードを比較してみたところ、2つのVCIでは早押しの際の情報の送り方に違いがありました。
私のVCIは以下のようなMessageで情報を受け渡す方式のVCIとなってます。
一方、遅延が発生してなかったVCIではStateの変更と監視により情報を受け渡す方式となっています。
(Stateがどこにどのように保存されているかはあまり理解してないのでそのへんの図は適当です)
上記より、messageでの情報送信はStateより送信速度が遅い、または送れるときがあるのではないかと仮定し、今回検証用のVCIを作成し試しに測定してみることにしました。
検証内容
messageとStateの速度について以下のような方法で時間比較をしました
- 測定開始の時刻を記憶
- 各ユーザーに対し測定開始の合図をMessageで送信
- Messageを受け取ったユーザーは以下の2つを実施する。(もしかしたら実行順でタイムが変わるかもしれなかったので、どちらを先に実行するかはランダムで決めてます)
- Message式の方法で情報を送信
- State式の方法で情報を送信
- 各方式でデータを受け取った時刻から測定開始の時刻を引き、かかった時間をそれぞれ記録
- 時間をVCI上に表示
検証結果
以下、何回かやってみた結果の抜粋となります。単位は秒で、色が付いてる場所が差があった場所です。
(私のだけやたら早いですが、これは自分に送るときは回線を通してないためだと思います。)
計20回くらいは試しましたが、上記のようにMessageがStateと同じか若干遅れるという結果になりました。
逆にStateが遅れることは一度もありませんでした。
また、エビデンスは残ってないですが、過去に作ったVCI(開始の合図の段階で送り方をMessage式とState式でそれぞれ分ける方式)で検証した際は、特定の人だけたまにmessage方式が秒単位で大幅に遅くなる現象が発生しました。その際もState方式は遅れることはありませんでした。
おそらく私のVCIで遅延が発生していた人もこのケースだったのではないかと思います。
(今回はその人と出会えなかったため未検証となってます。今回のVCIで検証できたら追記します)
まとめ
- message式の早押しVCIで押してるのにつくのが遅いという報告があった
- 実験的にmessageとstateで差分を測定
- messageの方がstateより反映が遅めか同等。ただしmessageはたまに大きく遅れることがあった
上記の結果となる技術的な理由はわかってないですが、もしわかったら追記するか別の記事を書こうと思います。