2017-10-06 16 views
0

私は、多くのNetHackサーバーのように、Telnetを介して再生するはずのNetHackクローンで作業しています。私が言ったように、これはクローンなので、最初からPythonで書かれています。Telnetサーバー:接続を開いたままにするのがよい方法ですか?

私はしばらく前に書いたSMTPサーバからのコードを再利用し、私のソケットサーバを設定していると、突然のすべてが私の注意は、コードのこの特定の行にジャンプ:

s.listen(15) 

私のサーバーができるように設計されましたどのクライアントとのデータ交換にも時間がかかりますが、理想的にはlisten(1)またはlisten(2)であれば、15人の同時クライアントに接続できます。しかし、このケースは異なります。

NetHackサーバをtelnetで接続するとAlt.orgが発生するので、私のサーバに接続している人は、単一のTelnetセッションを通じてリモートでroguelikeを再生できなければなりません。しかし、私は

[...]あなたが本当に128以上を保持している場合は、a)は、それらの処理に時間がかかりすぎてまたはb)重いが必要あなたが ある接続要求をキューに入れられたことを here読みました分散サーバ、またはc)DDoS攻撃を受ける。

ここで実行するのが良い方法は何ですか?接続されたユーザーが切断するか、または他の方法があるまで、すべての接続を開いたままにする必要がありますか?私はlisten(128)(または私のシステムのsocket.SOMAXCONNが何であれ)に行くべきか、それは悪い習慣ですか?

答えて

2

numberlisten(number)リクエスト制限数保留中接続要求。

接続要求は、acceptソケットメソッドを呼び出すまでOSによって受信された最初のSYN要求からペンディングです。したがって、numberはオープ​​ン(確立済み)接続数を制限しませんが、接続数をSYN_RECVに制限します。

ので、着信接続に応答しない悪い考えです:答えSYNがサーバーが利用できないと、それだけでするとき

  • クライアントは、状況を区別することはできません受信されるまで、クライアントはSYN要求を再送信する

    • キュー。

    より良いアイデアは、接続時に回答することですが、却下理由とクライアントとの間にいくつかのメッセージを送信し、接続を閉じることです。

  • +0

    恐ろしい!それを知らなかった。どうもありがとうございました! – Maralis

    関連する問題