-1

1 台のサーバー (ローエンド サーバー、Windows 2003 サーバーを実行) に 50 を超えるクライアントが接続されています。電源障害またはスイッチ障害が発生するたびに、クライアントはサーバーから切断され、サーバーはこのインシデントの間オンのままになる可能性があります (電源バックアップの場合)がインストールされている場合)、クライアントが戻ってくると、サーバーが自動的に検出され、接続手順が開始されます。この時点で、サーバーは関連データをクライアントに配信し始めます。この時点で、サーバーがデータを配信するのに十分な速度ではないため、一部のクライアントがフリーズし始め、残りのクライアントがブロックされることに気付きます。

私はこのクライアント ストームを制御するための大まかな方法​​を実装しましたが、この種のタスクを実行するためのより良いアルゴリズムがあるかどうかを尋ねていました。

注: Delphi アプリケーションで Asta ソケット コンポーネントを使用していますが、さまざまな分野の例を気にしません。

4

3 に答える 3

1

ネットワーク衝突検出プロトコルと同様に、クライアントは、起動時に接続を開始する前に、ランダムな期間待機する可能性がありますか?

于 2008-12-16T04:41:12.210 に答える
0

Bremen によって提案されたランダムな起動遅延に加えて、ある種の「ビジー状態です。後で再試行してください」というメッセージをプロトコルに実装してください。短いメッセージでクライアントを拒否することは、50、100、または 1000 のクライアントにとって問題にはなりません。ランダムな遅延と再試行 + 指数関数的なバックオフを行うことで、クライアントに応答してもらいます。

于 2008-12-16T04:45:42.933 に答える
0

解決策は、好みによっても異なります。接続要求をドロップダウンするか、ビジー メッセージを送信してもよろしいですか? 別のオプションとして、ラウンドロビン方式でクライアントにデータを送信し始めることもできます。この目的のために、異なるクライアントへのデータ送信を担当する異なるスレッドを持つことができます。この場合の利点は、どのクライアントも枯渇しないことです。

于 2012-03-03T10:19:16.883 に答える