私はJavaScriptとexpressjsのwsパッケージを使用してサーバーを構築しています。
私はポートフォリオ用のチャット アプリケーションを構築しています。当初の私のアイデアは、ユーザーがどのチャット (サブスクリプション) に参加しているかをクライアントからサーバーに伝え、それを subscriptions
配列に保存することでした。
これは私が望むアプローチですが、接続されているすべてのクライアントにメッセージが送信されるため、残念です。
サブスクリプション オブジェクトは、ユーザーが参加しているチャットの ID を含む単なる配列です。
チャットでクライアントにのみメッセージを送信するにはどうすればよいですか?
まず、各クライアントを、サブスクライブしているチャット ID にマップするメソッドを維持する必要があります。これは、JavaScript の
クライアントが WebSocket に接続するとき、そのサブスクリプション情報を subscriptionsMap に保存します。クライアントが切断するときは、必ずマップからサブスクリプションを削除してください:Map
を使用して行うことができます。ここで、キーはクライアント オブジェクト、値は購読しているチャット ID の配列です。 リーリーリーリー
ここで、特定のチャットでクライアントに送信する必要があるメッセージを受信したら、接続されているクライアントを反復処理し、関連するチャット ID に登録しているクライアントにのみメッセージを送信します。 リーリー