3

ニーズ

次のシナリオがあります。

  • 〜10万人のプレーヤー
  • 50 人の管理者

各プレイヤーは、各管理者と 1 対 1 で会話できます。プレーヤーは、別々の会話で同時にすべての管理者と 1 対 1 の会話をすることさえできます。

ただし、これらの会話のいずれかの管理者は、いつでも別の (または多数の) 管理者をこれらの何千もの会話の 1 つに招待することができます。

追加:

  • MAM で保存されたすべてのメッセージdefault:always
  • によるストリーム管理resend_on_timeout:true
  • プレーヤーは別のプレーヤーにメッセージを送信できません

例:

  • プレーヤー 1 が 3 つのアクティブな個別の会話を持っているとします。P1:Admin A, P1:Admin G, P1:Admin H
  • 次に、管理者 A が管理者 H をP1:Admin A会話に招待します (管理者 H が管理者 A の会話に招待されたという事実は、アクティブな会話を閉じませんP1:Admin H)。その後、プレイヤーはこれらのアクティブな会話を行います。
    • P1:Admin A + Admin HP1:Admin GP1:Admin H

ソリューション #1: マック ルーム

私はすべての会話を非公開の MUC ルームにすることを考えています (ユーザーが管理者とチャットしたい場合、クライアントは、私が開発する ejabberd モジュールが処理してルームを作成するカスタム IQ を発行し、プレーヤーと管理者は、この新しいルームで自動的にホワイトリストに登録されます)。

シナリオ例では、500 万の MUC ルームを意味する可能性があります。500 万の通常のチャットが一般的なシナリオであることは知っていますが、この量の部屋で問題ありませんか?

解決策 #2: XEP-0033 拡張スタンザ アドレス指定

このソリューションでは、拡張要素を持つ部屋の一部としてメッセージを識別できるようにすることを考えていましたchannel。このようにして、受信者は会話に参加したり、行ったりすることができます。

ただし、これには、ホワイトリストに登録されたユーザーのみがチャネルで話すことができる MUC ルームのセキュリティ制御はありません。このアプローチでこのプライバシーの問題を克服する方法はありますか?

要素を使用した例channel:

P1:管理者 A + 管理者 B、部屋 1

<message to='header.org' from='player1'>
   <addresses xmlns='http://jabber.org/protocol/address'>
     <address type='to'  jid='adminA'/>
     <address type='to'  jid='adminB'/>
   </addresses>
   <channel xmlns='chanel:namespace' id='1'>
   <body>Hi admin A and admin B!</body>
</message>

管理者 B 左、P1:管理者 A、まだ部屋 1

<message to='header.org' from='player1'>
   <addresses xmlns='http://jabber.org/protocol/address'>
     <address type='to'  jid='adminA'/>
   </addresses>
   <channel xmlns='chanel:namespace' id='1'>
   <body>Hi admin A only on the same room!</body>
</message>

最終的解決?

クライアントとサーバーのカスタマイズが問題ではないことを考えると...すべての要件を考慮して、どのソリューションが最適ですか? または、別の最適なソリューションはありますか?

4

1 に答える 1

2

私は同様の設定をしており、これが私がアプローチした方法です。会話は 1 対 1 のチャットとして開始されます。会話のほとんどは常に 1 対 1 であるためです。ただし、管理者が別の管理者または別のユーザーを招待したい場合は、チャットを変換します。XEP-0045 で説明されているように、MUC 会議に参加します。

これらの会議室は非表示でメンバーのみですが、永続的ではありません (最後の利用者が退室すると破棄されます)。

カスタム クライアントのみを使用する場合は、マルチキャスト戦略 (XEP-0033) も問題ありません。既存のクライアントを使用している場合は、ルームを制御できません。

于 2016-04-05T16:43:31.217 に答える