2011-12-14 1 views
1

少数のクライアント接続のみをホストするように設計されたソケットサーバーを作成しています。 )接続をフルでソケットサーバーのハンマーを防ぐ方法は?

  1. (サーバはその後、近く、フルであることをユーザーに通知し、()の着信ソケット接続を受け入れる:ユーザーが接続を試みると

    、私のサーバーは、2つのうちのいずれか、AFAICTを行うことができます;

  2. 接続リストがいっぱいの場合は、接続の試行を無視してください。

私は第2の選択肢が本当に好きではありませんが、最初の人はゲームをしているプレイヤーがサーバーを叩いてみるかもしれないというトラブルを招いているようです。私が単純にその試みを無視すれば、この点で何ら問題はありません。

どのようなアプローチをとるべきですか?

答えて

2

の数を制限します。

ハンマーは、狂ったようにハンマーになり、たくさんの接続を並行して開き、実際に試していない(または複数の)プログラムでなければ、サーバーを停止させません。

ユーザーがボタンをクリックして接続し、サーバーがいっぱいになったら、1秒以上待ってからプレーヤーを再試行させて、クライアント(プレーヤー)が幸せになるようにします(彼はコントロールしています)彼は1秒に1回好き勝手にハンマーを振るうことはできません。

2

着信接続のキューを保持し、設定する接続プールに応じていくつかのアクセス許可をaccept()できます。

つまり、一度に5つの接続を受け入れ、残りの着信接続である をキューに保存し、現在の状態に応じて動作させることができます。キュー。

+1

いいえ...これは、実用性がほとんどありません。後でやり直すように指示した後にクライアントを取り出す方が簡単です。実際にあなたが主張していることは、スロットが利用可能になるまで何も応答を得ないので、私の選択肢2とほとんど同じです。 「通り沿いの迷惑な人を無視するのか、丁重に私に残すように告げるのですか?」問題は、承認がそれ以上の問題をもたらす可能性があるということです。 –

+0

着信接続プールを使用することは、このような問題の一般的なアプローチです。 – Shai

+0

"後で試してもらうように指示してからクライアントを取り出す"方が簡単かもしれませんが、それは大きな障害です。ゲームに接続するとき、私は待ち行列に入っていることを知りたいし、後でもう一度試すように言われるのではなく、最終的に接続が行われることもわかります。後で?1分?10分?1時間?後で私が接続できるという保証がありますか?何も何度も何度も試してみる必要がありますか?他のゲーム)。 –

0

番目のオプション:使用iptablesの私はクライアントに通知言うと思い着信接続

+0

このゲームサーバーは、どのユーザーのマシンでもホスト可能です。私はiptablesがここでも遠隔から適用可能であるかどうかはわかりません。 –

関連する問題