Node.js/socket.io 環境で特定のユーザーの通知を収集するために pubsub を使用して、正しい方法で知識を得ていることを確認したいと思います。
これが私のセットアップです:
- メイン アプリケーションは Codeigniter 上の PHP で書かれています。Auth は CI (Session など) の Ion_Auth を使用して処理されます。
- リアルタイム (現在は通知のみ) は Node.js と Socket.io で処理されます
- 認証されたユーザーは友人を「グループ」に招待できます - 招待者がすでにアカウントを持っている場合、招待は電子メールと内部通知の両方を送信します
- 認証されたユーザーは、コメントを残したり、共有コンテンツに対してアクションを実行したりできます。どちらも、そのコンテンツを購読しているすべてのユーザーに通知されます。
これを処理する正しい方法は、各ユーザーが通知チャネルにサブスクライブすることだと思います。このチャネルには、すべてのユーザーのすべての通知が含まれており、上記のアクションのいずれかを実行するたびに発行される発行イベントによってチャネルにプッシュされます。次に、サブスクリプションは、このチャネルをチェックして、ユーザー セッションに関連する特定のデータを探します。
- 招待に関連する通知の場合、公開されたイベントには一意に識別されるユーザー データが含まれており、それを確認します。
- 特定のコンテンツに関連する通知については、そのコンテンツの識別マーカーを含む公開されたイベントのチャネルを確認します。
これは正しい方法ですか?私はsocket.io、node.js、およびpubsubにかなり慣れていませんが、これは私には理にかなっているようです. 私を投げかけている部分は、クライアントがサーバーからイベントをプルするのではなく、クライアントにイベントをプッシュする必要があるということです。このソリューションは両方を行うようです。
より単純な解決策 (つまり、socket.io によりネイティブなもの) があれば、洞察をいただければ幸いです。チュートリアルや例の方法で実際に見つけることができるのは、同じチャットクライアントの書き込みが何度も繰り返されていることだけです...
編集:または、接続されているすべてのクライアント ID のハッシュを対応するユーザー ID と一緒に維持し、新しいメッセージが着信したときに、そのメッセージを特定のクライアントに送信する方が実用的でしょうか?var socket = hash[userID]; socket.emit(message);
この場合、潜在的なボトルネックについて何か考えたことはありますか? サイトには、複数のイベントについて更新されている何千もの同時ユーザーが存在する可能性があります。