OnlineAvatar.jsの複数起動について【解決】

tetu
記事: 57
登録日時: 2019年8月02日(金) 18:25

OnlineAvatar.jsの複数起動について【解決】

投稿記事by tetu » 2020年3月09日(月) 16:02

以前に質問させていただいた内容に少し似ていますが
OnlineAvatar.jsを内部を少し変更して
2つ以上などを同時起動しようと思っておりますが
firebaseのプロジェクトを2個以上作り
それに対して接続する
例えば、変数100~200はプロジェクト1で管理
    変数101~300はプロジェクト2で管理など
このようにしたいのですが、どこを変更してもうまくいくません
もしかしたら、2個起動自体がfirebase不可能なのでしょうか?
ご助力お願いします。
最後に編集したユーザー tetu on 2020年3月13日(金) 17:44 [ 編集 1 回目 ]

アバター
Plasma Dark
記事: 668
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: OnlineAvatar.jsの複数起動について

投稿記事by Plasma Dark » 2020年3月09日(月) 21:08

2つ以上などを同時起動しようと思っております


管理対象を同一サービス内で分散させるのであれば、
データベースインスタンスを分ければ良さそうなものですが、
firebaseのリファレンスはお読みになりましたか?

https://firebase.google.com/docs/functions/database-events?hl=ja
tetu
記事: 57
登録日時: 2019年8月02日(金) 18:25

Re: OnlineAvatar.jsの複数起動について

投稿記事by tetu » 2020年3月09日(月) 22:37

connectedRefは接続状態の確認?のようなので
オンライン同期の開始部分の
this.variableRef = firebase.database().ref('variables');
この部分でデータベース インスタンスを設定?しているような気がします
'variables'ここの部分を全体的に書き換えなどしたらと考えております
書き換えして何度か動かして挑戦してみます
追記
一つのfirebaseプロジェクトでvariablesとvariables2で分けることは出来ました
別のfirebaseプロジェクトでも反映はまだできておりません
二つともに反映されるように改変しては、確認をしています
アバター
Plasma Dark
記事: 668
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: OnlineAvatar.jsの複数起動について

投稿記事by Plasma Dark » 2020年3月12日(木) 10:53

わかりにくい書き方をしてしまったようで、大変失礼しました。

まず、なぜfirebaseの接続先を2つ用意したいと思うのか、がわかりません。
仕組みとしてはできるようですが、本当にそのアプローチで実現すべきかどうかを検討すべきだと思います。
firebaseの接続先を2つ用意して接続先を動的に切り替えたい、では実現したい内容が実装に寄りすぎていて、適切に助言するための情報としては不足しています。

firebaseの接続先を切り替えるという解決手段を導く前に、ゲームとして実現したかったことは何でしょう。
それ次第では、接続先を複数用意するよりも遥かに手軽で安全な手段があるのではないかと思います。

特にシャーディングが必要であるようには見えないのですが、一応公式リファレンスのURLを貼っておきます。
https://firebase.google.com/docs/database/usage/sharding?hl=ja
プロジェクト内にインスタンスを複数作るようですね。有料プランの利用が必須のようです。
この方法が提供されているということは、複数プロジェクトにまたがる接続はもしかしたらできないかもしれません。試さないとわかりませんが。

connectedRefは接続状態の確認?のようなので
オンライン同期の開始部分の
this.variableRef = firebase.database().ref('variables');
この部分でデータベース インスタンスを設定?しているような気がします


データベースインスタンスを生成しているのは firebase.initializeApp ですね。
refメソッドの意味については firebase.database.Database 型のリファレンスを読んでみてください。
https://firebase.google.com/docs/reference/js/firebase.database.Database

OnlineAvatar.js は、firebaseデータベース上に以下のような構造のデータを作っています。(あくまで概念ですので、実際にこういう書式で書かれているかどうかは知りませんが)

コード: 全て選択

{
  ".info": {
    // 接続しているかどうか
    "connected": true
  },
  // スイッチ一覧
  "switches": {
    // スイッチIDとON/OFF状態
    1: true,
    ...
  },
  // 変数一覧
  "variables:" {
    // 変数IDのと変数の値
    1: 35,
    ...
  },
  // マップ上のプレイヤー情報一覧(マップIDごとに)
  "map001": {
    "ユーザID1": {
      "x": 1,
      "y": 5,
      "direction": 8,
      "speed": 4,
      "charaName": "ハロルド",
      "charaIndex": 1
    },
    ...
  }
}


refはこれらのデータへの参照を取得するためのメソッドです。
tetu
記事: 57
登録日時: 2019年8月02日(金) 18:25

Re: OnlineAvatar.jsの複数起動について

投稿記事by tetu » 2020年3月13日(金) 01:26

返答ありがとうございます
意図が伝わりにくくすみません
firebaseを使用してのやりたい事は現在
例えば変数100~200をfirebaseプロジェクト1で管理&確認
変数201~300をfirebaseプロジェクト2で管理&確認
のようにしたいです、理由は
変数最大値まで使用し変数内部の情報を大きくなってしまった場合
テストプレーや確認のためだけで簡単に超えてしまい
通信数、変数保管数などいろいろ削っていてもどうしても肥大化してしまい
それを、わけれるのかなぁ~と思いましてこの案になりました
プラス、分けれたら開きながらの確認もしやすいかもと思いました
調べてみたり、自分なりに色々試していますが
これが出来てしまったら、有料版の意味が多少なりとなくなってしまうので
同時に複数起動しての、firebaseのプロジェクト2個に反映は不可能なのかもと現在は思っております
もう少し検証してみて、不可能と思いましたら解決済みにしようと思っております
アバター
Plasma Dark
記事: 668
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: OnlineAvatar.jsの複数起動について

投稿記事by Plasma Dark » 2020年3月13日(金) 02:13

変数最大値まで使用し変数内部の情報を大きくなってしまった場合
テストプレーや確認のためだけで簡単に超えてしまい
通信数、変数保管数などいろいろ削っていてもどうしても肥大化してしまい
それを、わけれるのかなぁ~と思いましてこの案になりました


すみません。ここがよく理解できていないのですが……。
firebase databaseの何らかの制限に引っかかっているということでしょうか。

制限は以下のURLで確認できるかと思いますが、このうちのどの制限に引っかかっているのでしょう。
https://firebase.google.com/docs/database/usage/limits?hl=ja

レスポンス/リクエストサイズもノード数合計も、よっぽど無茶なことをしない限り制限に引っかかったりしなさそうなものですが……。
tetu
記事: 57
登録日時: 2019年8月02日(金) 18:25

Re: OnlineAvatar.jsの複数起動について

投稿記事by tetu » 2020年3月13日(金) 11:35

反応ありがとうございます

言葉が色々足りませんでした

firebase databaseの枠は
同時接続上限 100
ダウンロード上限(月) 10GB
となっており

この上記の数値で同時接続はテスト段階の為、身内のみで3~4にたいして
ダウンロードが一日何回かテストすると1GBいってしまい
現状では、完成できてもフリーとして公開不可能な状態であるため
firebase databaseの負担を下げるために2個に接続したいと思いました

通信の容量&頻度などを下げるようにはしていますが
それでも限界を感じております
アバター
Plasma Dark
記事: 668
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: OnlineAvatar.jsの複数起動について

投稿記事by Plasma Dark » 2020年3月13日(金) 13:03

同時接続上限 100
ダウンロード上限(月) 10GB


転送量は確かに10GBのようですが、同時接続100は古い情報を参照していませんか。
先程貼った制限事項の内容を見るに、同時接続上限は20万のようです。

ダウンロードが一日何回かテストすると1GBいってしまい


こればかりは、どんな原因で通信量が圧迫されているかを確認した上でそれを削る工夫をしていくしかないですね。

OnlineAvatar.js の構造上、一度にそんなに巨大なデータを送受信するはずはないので、通信回数がどこかで跳ねてるんじゃないかと予想します。
特に接続人数に応じて通信回数は乗算で増えていきますので、ゲームとして何を同期して何を同期すべきでないかを精査した上で、必要なものだけ同期するようにしたほうが良いです。

プラグインのデフォルト設定でスイッチと変数をそれぞれ10個ずつしか同期しないようになっているのは、そういった事情もあるのでしょう。
100個も200個も同期することを想定されていないのかもしれません。

あるいは、歩行するたびにプレイヤーの位置情報が同期されているのも通信回数増加の要因かもしれません。
数歩に一度にするとか、近くにいるプレイヤー以外は同期をある程度サボるとか、そういった工夫も必要になってくるかと思います。
アバター
Plasma Dark
記事: 668
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: OnlineAvatar.jsの複数起動について

投稿記事by Plasma Dark » 2020年3月13日(金) 14:00

そして、対症療法的な話ばかり書いてしまいましたが、本来オンラインのサービスを作成する場合は通信量の見積もりが必要不可欠です。
ゲームは同時に何人までプレイされる想定か、ピークタイム(同時接続数が最大になるような時間)にどれだけの通信量が発生するか、予め試算しなければなりません。

試算の結果、利用できるリソースで足りるかどうかをまず確認する必要があります。(今回は Firebase Realtime Database を利用されるということなので、その制限と照らし合わせる形ですね)

足りない場合は通信量をなんとかやりくりして足りるように収めるか、あるいはお金の力で解決するかの2択になります。
tetu
記事: 57
登録日時: 2019年8月02日(金) 18:25

Re: OnlineAvatar.jsの複数起動について

投稿記事by tetu » 2020年3月13日(金) 17:43

現状のシステムでゲームを作成したら
無料配布、フリーゲームとしては負担が出て難しそうです
ブラウザゲームに動画リワードでも導入出来れば頑張れそうですが
アプリ化などしないと動画リワードは無理そうで
ブラウザゲームでの広告貼り付けは、ほとんど効果なさそうなので
通信する容量を見直し
システムを簡易化するように頑張ってみます
複数起動が無理そうなので、ゲーム自体のサーバー分けした物をHPにアップして
サーバー1、サーバー2とかのゲームそのものを作るなどの対処方にしていきたいと思います
返答&回答ありがとうございました

“MV:質問” へ戻る