私はサーバー クライアント (クライアントは私が作成し、同僚は別の言語でサーバーを作成しました) アプリケーションを作成しました。900 以上のクライアント (すべての個々の TCP クライアント) をサーバーに接続しようとすると、次の例外が発生します。
No connection could be made because the target computer actively refused it.
ソケット エラー: 10061
WSAECONNREFUSED
接続拒否。ターゲット コンピュータがアクティブに拒否したため、接続できませんでした。これは通常、外部ホストで非アクティブなサービス、つまりサーバー アプリケーションが実行されていないサービスに接続しようとしたことが原因です。
最終的に、十分に長く待つと、それらはすべて TCP ソケットの上に接続されます (独自の再接続/キープアライブを作成したため)。したがって、失敗した場合は、成功するまで単純に再試行します。
サーバーが「過負荷」になっていて、すべてのリクエストを一度に処理できないため、このエラーが発生しますか (個別のスレッドでそれぞれ 900 のクライアントを作成しているため、ほぼすべてが同時に接続しようとしています)。
これに対抗する方法はありますか?TCP Socket オプションを微調整して、より多くのクライアントを一度に処理できるようにすることはできますか? サーバーとクライアントを同じマシンで実行していることにも注意してください。異なるマシンで実行すると、エラーメッセージの数が減るようです。これが、サーバーがそれらすべてをそれほど高速に処理できないため、これがある種の容量の問題であると私が考える理由です。