2017-04-14 9 views
0

友達スカイプのようなアプリケーションを計画します。私は1つのソケット接続で複数の部屋に関心がありません。スカイプのようなアプリケーションのクエスト

オンラインで200人の友達がいるとします。フェニックスソケットでは、ある人が部屋に入ると、彼はすべてのメッセージを送信して受信することができます(同じ部屋の他のユーザから送信)

私の質問はこのscnaioroにあります。

  • 私は私の友達とおしゃべりしています「」

  • 「自分」と「A」の両方が、我々は両方の送信とメッセージを正常に受信され、部屋「1」に参加します。

  • 私の他の友人 "B"は私にメッセージを送ります、私は部屋に参加していません:2まだ。私は "B"から警告と通知を受け取るつもりはない。

  • 私の質問は何をすべきかということです。私のオンライン友達のリストに従って複数の部屋に同時に参加する必要がありますか?この場合、部屋の多くは自分自身や他の友人によって参加されます。パフォーマンス上の問題はありますか。私のオンライン友達の数は200〜400人を超えるかもしれません。また、友人がオンラインまたはオフラインになったときにも、自分自身で部屋に参加したり、

  • もう1つのシナリオは、チャットの名前を1つの部屋だけにしておくことです。私は自分のロジックを含むSubChaneelモジュールを書く必要があります。各メッセージはサブチャネルパラメータでブロードキャストされます。私のjavascriptとUIは、どのメッセージがどのユーザーの(友人の)部屋に属しているかを制御します。アクティブなチャット(フレンド)が追加され、アクティブでない(オンライン)ユーザーは、隠されたUIエレメントにも追加されます。

答えて

0

私は非常によく似た質問How to keep a user subscribed to every chatPhoenix Channels - Multiple channels per socketに答えています。要約すると、開いているチャットセッションごとにユーザーチャネルとルーム/チャネルがあります。チャットチャネルを使用してメッセージをブロードキャストし、ユーザーチャネルを使用して、現在のサブスクリプションを追跡するUIの各部分の更新を各チャネルにプッシュします。

私のチャットアプリでは、誰かがその部屋で購読していない人がいる場合、自動的にその人のサブスクリプションを作成し、UIのサブスクリプションのリストに追加します。

チャットセッションが開いていない場合、私は部屋のメッセージをプッシュしません。しかし、私はプッシュアラート(@atとダイレクトメッセージの場合)と未読のメッセージ通知をユーザーチャネル経由で行います。

私のアプリケーションには、単一のチャットウィンドウレイアウト(Slackに似ています)があります。今、誰かがいくつかのウィンドウを切り替えると、そのたびにメッセージがリロードされます。しかし、毎回部屋をロードするのに数秒かかります。ユーザーが部屋を変更したときに、古い部屋をクライアントに保存するように設計を変更します。こうすることで、サーバーに戻らずにクライアント内の部屋をリロードすることができます。しかし、私は複数の部屋のチャンネルを開いたままにして、アクティブなチャットには開いていない部屋の着信メッセージを処理する必要があります。

関連する問題