1

そこで、UDP で輻輳制御を行う非常に単純なクライアント サーバー システムを作成しようとしています。簡単に言うと、サーバーはデータ パケットを送信し、クライアントからフィードバック パケットを受信します。私はこれにかなり慣れていないため、次のことについて確信が持てません。

(1) 同じソケットに何人のユーザーが接続できますか?

(2) ソケットは複数のユーザーが同時に使用できますか (並列で読み取り/書き込みを行うこともできます)?

(3) 各ユーザーに対して、データ パケットを送信し、フィードバック パケットを並行して受信できるように、スレッドを使用する必要があります。別の投稿で、ユーザーごとにスレッドを開くべきではないことを読みました (そして、ユーザーごとに 2 つのスレッドを開いています)。これを行うのは間違っていますか?固有の誤解がありますか? これを処理する方法について誰か提案がありますか?

申し訳ありませんが、私はこれに非常に慣れていません。

4

2 に答える 2

2

(1) ソケットへの接続数はオペレーティング システムによって制限されますが、最大 100k まで可能で、C10K問題を確認してください。

(2) ソケットは、複数のスレッドや、フォーク前のアプローチを使用する複数のプロセスで使用される場合があります

(3) 接続ごとに新しいスレッドを使用することもできますが、最良のアプローチはスレッド プールを使用することです。代わりに、非同期アプローチを使用してスレッドの使用を避けることもできます。

于 2013-03-29T01:01:12.697 に答える
1

のドキュメントによるとsocket.listen()

ソケットへの接続をリッスンします。backlog 引数は、キューに入れられた接続の最大数を指定し、少なくとも 0 にする必要があります。最大値はシステムに依存し (通常は 5)、最小値は 0 に強制されます。

したがって、技術的には、リクエストは並行して処理されず、通常は最大 5 までキューに入れられます。あなたが言及した投稿の作成者が、ユーザーごとにスレッドを開始すべきではないと述べなければならない理由はわかりませんが、私はほとんどのサーバーがリクエストごとに1つのスレッドを使用することを読んだことがあります。また、スレッド プールは一般的なパターンであり、同期化されたオブジェクトを使用して簡単に実装できますQueue(この例は、小規模な実装を見たい場合に役立つ場合があります)。

于 2013-03-29T01:38:43.730 に答える