2016-06-28 5 views
1

イベントとデータを他のリスナーにブロードキャストするためにsocket.ioを使用すると、誰もがデータを見ることができるようになるまっすぐです。しかし、各ユーザが自分に属しているデータしか見ることができないときに使用できる戦略はありますか?Socket.io - 異なる許可レベルのユーザーに放送するための戦略

たとえば、注文システムがあります。ダッシュボードでは、アクセスレベルに基づいてすべてのオーダーを見ることができます。したがって、あるユーザーが注文を更新した場合、そのイベントをダッシュ​​ボードで開いている各ウィンドウの新しいデータを取得することなく他のすべてのユーザーにブロードキャストできます。

クライアント側からsocket.send('ordersUpdated', data)というような例があります。ノードサーバーがそれをキャッチし、そのデータを他のソケットにリッスンしてordersUpdatedイベントを受信すると思います。

しかし、ユーザーが自分の注文を見ることができるケースはどうですか?このレベルの各ユーザーは自分のデータしか見ることができないため、同じデータをブロードキャストできません。その注文の1つが、すべての注文を見ることができるユーザーによって変更された注文の場合はどうなりますか?彼らのダッシュボードもアップデートが必要ですが、同じブロードキャストデータを受信することはできません。

私はこれにアプローチする特別な方法はありますか?一つのアイデアは、私が考えている良いものではありませんが、何かが更新されたというイベントを送信するだけで、サーバーからデータを再フェッチすることになります。

さらに詳しい情報を提供するために、AngularとLaravelも使用しています。

+0

'ソケット 'は、プログラミングレベルでは' socket.io'関連ではありません...タグを削除しました。詳細については、[tag:sockets]タグの詳細を参照してください。 – Myst

答えて

2

1つの可能性は、チャットルームを使用して、特定のアクセスレベルでユーザーのグループを管理することです。たとえば、許可レベルによって名前を付けられた一連の部屋を持つことができます。ユーザーがサーバーに接続し、ユーザーを認証すると、そのユーザーのアクセス許可レベルに応じて、ユーザーが属するチャットルームにユーザーを置くことができます。最高レベルの許可(すべてのオーダーを見ることができる)は、「all_orders」と呼ばれることがあります。

次に、注文の変更が発生した場合、all_orders内の全員とその変更に一致する他のチャットルームにブロードキャストします。また、注文に直接関連付けられているユーザーに通知します。

チャットルームを使用する利点は、ユーザーのグループを追跡し、それらにブロードキャストするための組み込みのsocket.ioスキームを使用することです。 onusはあなたのサーバコード上に依然として特定の注文について通知されるべきユーザのグループを特定するが、socket.ioはユーザのグループを管理し、それらにブロードキャストする仕組みを管理する。チャットルームを使用するもう1つの利点は、ユーザーが切断したときにsocket.ioがすべての関連するチャットルームからそのソケットを自動的に削除することです。グループに独自のデータ構造を使用する場合は、メモリリークを避けるために、接続するたびに特定のソケットを削除する必要があります。

+0

フィードバックに感謝します。 – kenshin9

関連する問題