0

複数のクライアントを処理するチャット サーバーを構築しようとしています。接続されている各クライアントを新しいスレッドで処理しようとしています。問題は、クライアントから受信したメッセージを目的の受信者に転送する方法について本当に混乱していることです。つまり、client-1 から client-5 までです。私はソケットプログラミングに非常に慣れていません。したがって、どんな種類の助けも大歓迎です。

4

1 に答える 1

1

これは、サーバーの疑似設計です。プログラミング言語にとらわれない用語で話します。

「クライアントID番号」を対応する「ソケット」(およびその他のクライアントデータ)にマップする「グローバルハッシュテーブル」を用意します。このハッシュ テーブルへのアクセスはミューテックスで保護されています。

新しい接続を受け入れるたびに、スレッドをスピンアップします。クライアントが自分自身を識別し、割り当てられたクライアント ID 番号を取得し、セッションに追加されるチャット プロトコルに何かがあると思います。スレッドが最初に行うことは、このクライアント接続のソケットをハッシュ テーブルに追加することです。

メッセージが着信するたびに (クライアント 1 からクライアント 5 など)、ハッシュ テーブルで「クライアント 5」を検索して、そのソケットを取得します。このソケットでメッセージを転送します。

解決すべきいくつかの競合状態がありますが、それで十分な設計になるはずです。

もちろん、本当にスケーリングしたい場合は、「接続ごとのスレッド」アプローチは使用しません。ただし、同時に接続するクライアントが約 100 以下に制限されている場合は問題ありません。その後、ノンブロッキング I/O を使用したシングルスレッド アプローチを検討する必要があります。

于 2012-12-23T10:07:26.007 に答える