2017-05-06 1 views
0

あなたがsocket.ioを使用して友人に会った人に投稿コンテンツを送信するにはどうすればよいですか?一人のユーザーとその友人のための名前空間を作成しなければならないし、新しい投稿が利用できるときに特定のユーザーの名前空間を聞くにはどうすればよいのでしょうか。ソーシャルネットワークのフィードに投稿を送信するのにsocket.ioを使用するのが最良の方法ですか?

a、b、c、d、eのいずれかがオンライン/接続されている場合、xに5人の友人(a、b、c、d、e)がxのネームスペースに接続する方法を考えます。

+0

ユーザーがソケットに接続するたびに、そのソケットIDをデータベースに保存できます。今、友人Xが何かをするとき、通知を得るために、あなたはa、b、c、d、eを知っています。それで、ソケットIDに通知を出してください。これは簡単にこれを管理するのに役立ちます。部屋を使用し、新しい友達が接続されている場合は、管理するのが複雑な部屋を確認して更新する必要があります。 –

+0

ソケットIDが特定のユーザーを参照していることを知りたいのですが? –

答えて

1

私は部屋があなたの望むようにうまくいくとは思わない。ライブ中に修正が可能なN対Mのネットワークがあり、その構造は部屋のような単純なものではうまく機能しません。

代わりに、私はあなたがある特定のユーザーの接続されているすべての友人にメッセージを送りたいときは、ちょうどこのような単純な何かをすることをお勧めしたい:

  1. は、あなたの中に元のユーザの友人を検索しますデータベース。
  2. 現在接続されているすべてのソケット(これはsocket.ioがあなたのために保持する構造体)を循環し、各ユーザーをその友達のリストと比較します。マッチした友だちを見つけたら、メッセージを送信して次の友達に移動します。

友人が変わったときや誰かがオンラインまたはオフラインになったときに誰かが接続するときは、何もしません。メッセージを送信したいときは、友だちを検索し、友人である接続されたユーザーに送信します。誰が接続すると

  1. は、友人の彼らのリストを取得し、友人のそのリスト内の各ユーザのために、参加する:あなたは、このために部屋を使用したい場合は


    は、その後、あなたはこのような何かを行うことができますユーザを部屋に接続する。たとえば、「Bob」が接続していてBobが「Alice」と「Ted」の友人である場合、Bobを「Alice_friends」と「Ted_friends」という名前の部屋に参加させます。ボブが100人の友人を抱えていたら、彼は100人の部屋に(彼は友達ごとに1人ずつ)参加します。

  2. その後、アリスが友人にメ​​ッセージを送信したいとき、彼女は "Alice_friends"ルームにメッセージをブロードキャストします。
  3. その後、接続されたユーザーが友人を追加するたびに、その友だちの部屋に参加する必要があります。
  4. その後、接続されたユーザーが友人を削除すると、その友人の部屋から削除する必要があります。

socket.ioは、切断されたときに自動的にソケットをすべての部屋から削除するので、自動的に行う必要はありません。


これら2つのスキームの間にはトレードオフがあります。最初は、すべての友人にメッセージを送信したいときにもう少し作業をしますが、ユーザーが接続して実行時に余分なメモリを消費しても、余分な作業はありません。

2つ目のスキームは、接続時に友人が追加/削除され、より多くのメモリを消費するたびに多くの作業を行いますが、各友人にメッセージを送信するたびに高速になることがあります。性能差またはメモリ消費差が顕著であるか重要であるかどうかはテストを必要とし、実装の規模および詳細に依存する。

+0

名前空間の使い方の詳細を知りたい –

+0

名前空間は、ソケットが最初に接続されたときに接続するものであり、指定された接続は最初の名前空間にしか存在できません。私はこの問題と何が関係しているのか全く分かりません。 – jfriend00

+0

私はa、b、c、dのネームスペースを作成してデータベースに格納して、自分の投稿をCに送信する必要がある場合は、C、dの名前空間とソケットthem.willを取り出すだけです。 –

関連する問題