0

サーバー/クライアント アーキテクチャに基づくチャット アプリケーションを作成しています。サーバーとクライアント間の通信は、TCP ベースのソケットです。このアプリケーションでは、さまざまなパブリック ルームを作成しています。任意の数のユーザーが任意のパブリック ルームに参加できます。

ここで、パブリックルームのユーザーが「XYZ」がルームにメッセージを送信すると、「XYZ」パブリックルームのすべての人にそのメッセージを配信する必要があります。

問題はここから始まります。パブリック ルーム「XYZ」に 1000 人のユーザーがいて、ユーザーがこのルームでメッセージを送信するたびに、このメッセージを送信して、999 人を for ループ内の対応するソケット記述子に 1 人ずつ休ませる必要があるとします。

これは私が知っている唯一の方法ですが、ユーザーが増えるとシステムのパフォーマンスが大幅に低下するため、これは良い方法ではないと思います。

同じことを達成する効率的な方法を提案して、これについて私を助けてください。

ありがとう。

4

2 に答える 2

2

これが、私の知る限り、ストリーム ソケット (つまり、(信頼できる) チャットに使用することをお勧めする TCP) を使用する唯一の方法です。

マルチキャストなどは、UDP などでのみ機能します。

これはまた、(とりわけ、冗長性などのように)大規模な IRC ネットワークに複数のサーバーがある理由でもあります。ユーザーメッセージを受信したサーバーは、自分のすべてのユーザーとネットワークのすべてのサーバーに配信するだけで済み、その後、サーバーは再びそれらのユーザーに配信します。これにより、個々のサーバーの負荷が軽減されます。

于 2012-06-29T13:59:08.767 に答える
0

パブ サブを使用します。クライアントはチャット ルームにサブスクライブし、メッセージを 1 つのエンティティ (チャット ルーム) に発行するだけで済みます。

于 2012-06-29T14:01:36.203 に答える