ニーズ
次のシナリオがあります。
- 〜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 H
、P1:Admin G
、P1: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>
最終的解決?
クライアントとサーバーのカスタマイズが問題ではないことを考えると...すべての要件を考慮して、どのソリューションが最適ですか? または、別の最適なソリューションはありますか?