2011-06-25 10 views
4

15分ごとにサーバー上でオンラインになっているかどうかを確認するには、UDPプロトコルを使用して〜10000ゲームサーバーを照会する必要があります。私のコードは動作していますが、オフラインのスレッド・スレッドであるサーバーは処理が遅くなります。私は20スレッドを使用し、より多くのPythonのUDPソケットは、クロールに遅くなります。サーバがオンラインであるかどうかを確認するのに妥当なタイムアウトはありますか?

現在、私はサーバーがオフラインであると判断する前に5秒のタイムアウトを使用しています。この限界をさらに減らすことができますか?


ハートビートを使用することをお勧めしないでください、私のサーバーは、リーチするとハートビートのほとんどを受け取るいない持っているゲームのための非公式のマスターサーバーです。

+0

これをserverfault.comにも追加することができます。 – cwallenpoole

答えて

1

特にUDPを使用している場合は、同期通信(パケットを送信し、ブロックして結果を待つ)を使用する必要はありません。あるスレッドがpingを送信し、もう1つのスレッドが同じソケットで常にポンを受信するようにします。結果に複雑な処理を加えなければならない場合は、別の結果を使用することができます。

チャレンジは送信ロジックにあります。自分のインターネット接続を圧倒したくないので、設定可能なパケットレートを提案します。また、UDPパケットはネットワーク内で失われる可能性があるため、少なくとも1回または2回再送してから放棄してください。タイムアウトとして、私は約2秒を示唆しています。なぜなら、ゲームへのping(つまり、遅延に非常に敏感な)サーバーがそれより長い時間を要する場合、それはおそらく使用できないからです。

+0

あなたの努力をいただきありがとうございます。少し簡潔にしたいのであれば大歓迎ですが、そうする必要はありません。最終的な部分について私は誰が私を決定するのか分からないのですか?私のサーバーはアムステルダムにあり、オーストラリアのゲームサーバーでどのようなpingがあるのか​​知っていますか? – orlp

+0

@ nightcrackerどの部分を減らすべきですか?アムステルダムとシドニーの間の距離は約100ライト・秒です。 2倍の輻輳、往復、もう1つの2倍のバッファを仮定すると、あなたはまだ800msに過ぎません。だから、2は良い近似のままです。それは問題ではありませんが、安全に5分のタイムアウトを設定することができ、すべてが正常に動作します。 – phihag

関連する問題