私は、ソケットプログラミングを使ってPythonで簡単なチャットアプリケーションを作成しています。この "socket.listen(100)"(これは100に制限されています)とは異なり、無制限の接続を受け入れるにはソケットが必要です。私は大量の接続を処理するために何をすべきですか?ソケットで無制限の接続を受け入れる
答えて
listen()
で与えられた数は、バックログキューの大きさ - 保留中の要求の数ではなく、アクティブな要求の数にヒント。
バックログパラメータには、通常、5
の値が使用されます。これは過去のものです。 Berkeleyソケットの初期のバージョンでは、5より大きい値が5を与えた "機能"がありました。これはずっと前に修正されましたが、あなたが心配する必要のある番号ではありません。ヒントだけであることを覚えておいてください。
バックログが超過した場合、クライアントに実際に渡されるエラーは一般的にcatch-all ECONNREFUSED
ですが、古いシステムでは特定のバックログエラーが発生します。
多くのシステムでは、バックログはサイレントでSOMAXCONN
に切り捨てられます。
新しい接続をaccept()するだけで、それぞれを処理する新しいスレッドを開始するaccept()ループが必要です。誰かが接続しようとすると、すぐにそれを受け入れて接続リストに追加します。
セッションのアイドルタイムアウトを長くしたい場合は、長いタイムアウトで読み込む接続ごとのスレッド。タイムアウトが切れると、ソケットを閉じてスレッドを終了します。
同時接続が十分にある場合にサーバーがFDを使い果たした場合、accept()は対応するerrnoで失敗し始めます。この場合、無視してループを続けるだけです。おそらく、この状況でアイドルタイムアウトを減らし、受け入れが再び働くようになったらそれを戻すかもしれません。
問題が多少間違っています。サーバー側のソケットでは、同じソケットへの接続を受け入れ、他のプロセス/スレッドによって処理されます。
#
# Setup socket and other handling stuff here
#
while True:
conn = sock.accept()
thread.start_new_thread(handler, (conn,))
実際のシステムのメモリに基づく最大ソケット数には実際的な制限があります。
http://docs.python.org/2/library/socketserver.htmlを参照してください。私は最後のいくつかの例(Asynchronous Mixinsの下で)は、あなたが達成したいものに非常に近いと思う。
- 1. ソケット接続を受け入れるJava EEアプリケーションに接続
- 2. PHP TCPソケット接続制限 - Windowsサーバ
- 3. Javaソケットが接続を受けない
- 4. Javaでソケット接続を受け入れることができない
- 5. ソケット転送でファイルが無限のデータを受信し続ける
- 6. ソケット接続タイムアウト例外を受け取り続ける
- 7. Javaソケット1つのIPからの接続を受け入れる
- 8. DFAが同じ言語を受け入れる回数は無制限です
- 9. Golangサーバで永続的なtcp接続を受け入れる
- 10. 接続制限
- 11. 春のブートサーバーがPostgresの接続制限を打ち続ける
- 12. javaソケットの接続を制御する
- 13. mysqlが外部で接続を受け入れる方法
- 14. Nettyのソケットの受け入れ遅延
- 15. aspクラシックのリクエスト受け入れ制限を増やす方法
- 16. Java Webサーバーへのリモート接続を受け入れる方法
- 17. 新しい接続の受け入れを停止する
- 18. JavaServerSocketは、受け入れられたソケットでclose()が呼び出されるまで新しい接続を受け付けません
- 19. Apache接続の制限
- 20. socket.ioの接続制限
- 21. Kurentoの接続制限
- 22. オープンnettcpbinding接続の制限
- 23. Silverlight MultiScaleImageの接続制限?
- 24. ソケット接続を受け入れる前にIPを要求するのは熱くなっていますか?
- 25. Python TCP Server接続とブロードキャストコマンドを受け入れる
- 26. ソケットファイルディスクリプタをバッファに入れ、着信接続の受け入れを続ける方法は?
- 27. Winsock/BSDソケット - ローカルIPと異なる宛先IPを持つTCP接続を受け入れる
- 28. AndroidのURLのみを受け入れるようにEditTextを制限する
- 29. libeventの接続を制限する
- 30. Kryonet接続ID制限?
を参照してください。あなたが無制限の接続のための無制限の帯域幅を持っていますか? –
はい、私は無制限の帯域幅を持つVPSを持っています。 – Matarata
'' socket.listen''のパラメータは、 '' accept''されていない保留中の接続の最大数です。確立された接続の数は制限されません。 – jasonharper